use of alfio.model.Ticket in project alf.io by alfio-event.
the class EventManagerIntegrationTest method testIncreaseEventSeatsWithABoundedCategory.
@Test
public void testIncreaseEventSeatsWithABoundedCategory() {
List<TicketCategoryModification> categories = Collections.singletonList(new TicketCategoryModification(null, "default", 10, new DateTimeModification(LocalDate.now(), LocalTime.now()), new DateTimeModification(LocalDate.now(), LocalTime.now()), DESCRIPTION, BigDecimal.TEN, false, "", true, null, null, null, null, null));
Pair<Event, String> pair = initEvent(categories, organizationRepository, userManager, eventManager, eventRepository);
Event event = pair.getKey();
EventModification update = new EventModification(event.getId(), Event.EventType.INTERNAL, null, null, null, null, null, null, null, event.getOrganizationId(), null, "0.0", "0.0", ZoneId.systemDefault().getId(), null, DateTimeModification.fromZonedDateTime(event.getBegin()), DateTimeModification.fromZonedDateTime(event.getEnd()), event.getRegularPrice(), event.getCurrency(), 40, event.getVat(), event.isVatIncluded(), event.getAllowedPaymentProxies(), null, event.isFreeOfCharge(), null, 7, null, null);
eventManager.updateEventPrices(event, update, pair.getValue());
List<Ticket> tickets = ticketRepository.findFreeByEventId(event.getId());
assertNotNull(tickets);
assertFalse(tickets.isEmpty());
assertEquals(20, tickets.size());
assertEquals(20, ticketRepository.countReleasedUnboundedTickets(event.getId()).intValue());
assertEquals(10, tickets.stream().filter(t -> t.getCategoryId() != null).count());
}
use of alfio.model.Ticket in project alf.io by alfio-event.
the class EventManagerIntegrationTest method testEventGenerationWithOverflow.
@Test(expected = IllegalArgumentException.class)
public void testEventGenerationWithOverflow() {
List<TicketCategoryModification> categories = Arrays.asList(new TicketCategoryModification(null, "default", 10, new DateTimeModification(LocalDate.now(), LocalTime.now()), new DateTimeModification(LocalDate.now(), LocalTime.now()), DESCRIPTION, BigDecimal.TEN, false, "", true, null, null, null, null, null), new TicketCategoryModification(null, "default", 10, new DateTimeModification(LocalDate.now(), LocalTime.now()), new DateTimeModification(LocalDate.now(), LocalTime.now()), DESCRIPTION, BigDecimal.TEN, false, "", true, null, null, null, null, null), new TicketCategoryModification(null, "default", 0, new DateTimeModification(LocalDate.now(), LocalTime.now()), new DateTimeModification(LocalDate.now(), LocalTime.now()), DESCRIPTION, BigDecimal.TEN, false, "", false, null, null, null, null, null));
Event event = initEvent(categories, organizationRepository, userManager, eventManager, eventRepository).getKey();
List<Ticket> tickets = ticketRepository.findFreeByEventId(event.getId());
assertNotNull(tickets);
assertFalse(tickets.isEmpty());
assertEquals(AVAILABLE_SEATS, tickets.size());
assertTrue(tickets.stream().noneMatch(t -> t.getCategoryId() == null));
}
use of alfio.model.Ticket in project alf.io by alfio-event.
the class CustomMessageManager method preview.
private List<MessageModification> preview(Event event, List<MessageModification> input, String username) {
Model model = new ExtendedModelMap();
Organization organization = eventManager.loadOrganizer(event, username);
model.addAttribute("eventName", event.getDisplayName());
model.addAttribute("fullName", "John Doe");
model.addAttribute("organizationName", organization.getName());
model.addAttribute("organizationEmail", organization.getEmail());
model.addAttribute("reservationURL", "https://this-is-the-reservation-url");
model.addAttribute("ticketURL", "https://this-is-the-ticket-url");
model.addAttribute("reservationID", "RESID");
return input.stream().map(m -> MessageModification.preview(m, renderResource(m.getSubject(), model, m.getLocale(), templateManager), renderResource(m.getText(), model, m.getLocale(), templateManager), m.isAttachTicket())).collect(Collectors.toList());
}
use of alfio.model.Ticket in project alf.io by alfio-event.
the class CustomMessageManager method sendMessages.
public void sendMessages(String eventName, Optional<Integer> categoryId, List<MessageModification> input, String username) {
Event event = eventManager.getSingleEvent(eventName, username);
// dry run for checking the syntax
preview(event, input, username);
Organization organization = eventManager.loadOrganizer(event, username);
AtomicInteger counter = new AtomicInteger();
Map<String, List<MessageModification>> byLanguage = input.stream().collect(Collectors.groupingBy(m -> m.getLocale().getLanguage()));
sendMessagesExecutor.execute(() -> {
categoryId.map(id -> ticketRepository.findConfirmedByCategoryId(event.getId(), id)).orElseGet(() -> ticketRepository.findAllConfirmed(event.getId())).stream().filter(t -> isNotBlank(t.getFullName()) && isNotBlank(t.getEmail())).parallel().map(t -> {
Model model = new ExtendedModelMap();
model.addAttribute("eventName", eventName);
model.addAttribute("fullName", t.getFullName());
model.addAttribute("organizationName", organization.getName());
model.addAttribute("organizationEmail", organization.getEmail());
model.addAttribute("reservationURL", ticketReservationManager.reservationUrl(t.getTicketsReservationId(), event));
model.addAttribute("reservationID", ticketReservationManager.getShortReservationID(event, t.getTicketsReservationId()));
model.addAttribute("ticketURL", ticketReservationManager.ticketUpdateUrl(event, t.getUuid()));
return Triple.of(t, t.getEmail(), model);
}).forEach(triple -> {
Ticket ticket = triple.getLeft();
MessageModification m = Optional.ofNullable(byLanguage.get(ticket.getUserLanguage())).orElseGet(() -> byLanguage.get(byLanguage.keySet().stream().findFirst().orElseThrow(IllegalStateException::new))).get(0);
Model model = triple.getRight();
String subject = renderResource(m.getSubject(), model, m.getLocale(), templateManager);
String text = renderResource(m.getText(), model, m.getLocale(), templateManager);
List<Mailer.Attachment> attachments = new ArrayList<>();
if (m.isAttachTicket()) {
ticketReservationManager.findById(ticket.getTicketsReservationId()).ifPresent(reservation -> {
ticketCategoryRepository.getByIdAndActive(ticket.getCategoryId()).ifPresent(ticketCategory -> {
attachments.add(generateTicketAttachment(ticket, reservation, ticketCategory, organization));
});
});
}
counter.incrementAndGet();
notificationManager.sendSimpleEmail(event, triple.getMiddle(), subject, () -> text, attachments);
});
});
}
use of alfio.model.Ticket in project alf.io by alfio-event.
the class EventManagerIntegrationTest method testAddUnboundedCategory.
/**
* When adding an unbounded category, we won't update the tickets status, because:
* 1) if the unbounded category is using existing seats, the event cannot be already sold-out
* 2) if the unbounded category has been added after an event edit (add seats), then the tickets are already "RELEASED"
* 3) if there is another unbounded category, then it is safe not to update the tickets' status, in order to not
* interfere with the existing category
*/
@Test
public void testAddUnboundedCategory() {
List<TicketCategoryModification> categories = Collections.singletonList(new TicketCategoryModification(null, "default", 10, new DateTimeModification(LocalDate.now(), LocalTime.now()), new DateTimeModification(LocalDate.now(), LocalTime.now()), DESCRIPTION, BigDecimal.TEN, false, "", true, null, null, null, null, null));
Pair<Event, String> pair = initEvent(categories, organizationRepository, userManager, eventManager, eventRepository);
Event event = pair.getKey();
TicketCategoryModification tcm = new TicketCategoryModification(null, "default", -1, new DateTimeModification(LocalDate.now(), LocalTime.now()), new DateTimeModification(LocalDate.now(), LocalTime.now()), DESCRIPTION, BigDecimal.TEN, false, "", false, null, null, null, null, null);
eventManager.insertCategory(event.getId(), tcm, pair.getValue());
List<Ticket> tickets = ticketRepository.findFreeByEventId(event.getId());
assertNotNull(tickets);
assertFalse(tickets.isEmpty());
assertEquals(AVAILABLE_SEATS, tickets.size());
assertEquals(10, tickets.stream().filter(t -> t.getCategoryId() == null).count());
}
Aggregations