Search in sources :

Example 56 with Event

use of alfio.model.Event in project alf.io by alfio-event.

the class ResourceController method previewTemplate.

@RequestMapping(value = "/overridable-template/{name}/{locale}/preview", method = RequestMethod.POST)
public void previewTemplate(@PathVariable("name") TemplateResource name, @PathVariable("locale") String locale, @RequestParam(required = false, value = "organizationId") Integer organizationId, @RequestParam(required = false, value = "eventId") Integer eventId, @RequestBody UploadBase64FileModification template, Principal principal, HttpServletResponse response) throws IOException {
    Locale loc = Locale.forLanguageTag(locale);
    if (organizationId != null && eventId != null) {
        checkAccess(organizationId, eventId, principal);
        Event event = eventRepository.findById(eventId);
        Organization organization = organizationRepository.getById(organizationId);
        Optional<TemplateResource.ImageData> image = TemplateProcessor.extractImageModel(event, fileUploadManager);
        Map<String, Object> model = name.prepareSampleModel(organization, event, image);
        String renderedTemplate = templateManager.renderString(template.getFileAsString(), model, loc, name.getTemplateOutput());
        if ("text/plain".equals(name.getRenderedContentType())) {
            response.addHeader("Content-Disposition", "attachment; filename=" + name.name() + ".txt");
            response.setContentType("text/plain");
            response.setCharacterEncoding("UTF-8");
            try (OutputStream os = response.getOutputStream()) {
                StreamUtils.copy(renderedTemplate, StandardCharsets.UTF_8, os);
            }
        } else if ("application/pdf".equals(name.getRenderedContentType())) {
            response.setContentType("application/pdf");
            response.addHeader("Content-Disposition", "attachment; filename=" + name.name() + ".pdf");
            try (OutputStream os = response.getOutputStream()) {
                TemplateProcessor.prepareItextRenderer(renderedTemplate).createPDF(os);
            }
        } else {
            throw new IllegalStateException("cannot enter here!");
        }
    }
}
Also used : Locale(java.util.Locale) Organization(alfio.model.user.Organization) ByteArrayOutputStream(java.io.ByteArrayOutputStream) OutputStream(java.io.OutputStream) Event(alfio.model.Event)

Example 57 with Event

use of alfio.model.Event 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());
}
Also used : java.util(java.util) TicketCategoryRepository(alfio.repository.TicketCategoryRepository) MessageModification(alfio.model.modification.MessageModification) Autowired(org.springframework.beans.factory.annotation.Autowired) Mailer(alfio.manager.system.Mailer) Json(alfio.util.Json) Model(org.springframework.ui.Model) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Triple(org.apache.commons.lang3.tuple.Triple) TicketRepository(alfio.repository.TicketRepository) Executor(java.util.concurrent.Executor) Organization(alfio.model.user.Organization) TemplateManager(alfio.util.TemplateManager) Collectors(java.util.stream.Collectors) Executors(java.util.concurrent.Executors) TicketReservationManager(alfio.manager.TicketReservationManager) TicketCategory(alfio.model.TicketCategory) Component(org.springframework.stereotype.Component) EventManager(alfio.manager.EventManager) StringUtils.isNotBlank(org.apache.commons.lang3.StringUtils.isNotBlank) Ticket(alfio.model.Ticket) NotificationManager(alfio.manager.NotificationManager) TicketReservation(alfio.model.TicketReservation) Log4j2(lombok.extern.log4j.Log4j2) Event(alfio.model.Event) ExtendedModelMap(org.springframework.ui.ExtendedModelMap) ExtendedModelMap(org.springframework.ui.ExtendedModelMap) Organization(alfio.model.user.Organization) Model(org.springframework.ui.Model)

Example 58 with Event

use of alfio.model.Event 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);
        });
    });
}
Also used : java.util(java.util) TicketCategoryRepository(alfio.repository.TicketCategoryRepository) MessageModification(alfio.model.modification.MessageModification) Autowired(org.springframework.beans.factory.annotation.Autowired) Mailer(alfio.manager.system.Mailer) Json(alfio.util.Json) Model(org.springframework.ui.Model) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Triple(org.apache.commons.lang3.tuple.Triple) TicketRepository(alfio.repository.TicketRepository) Executor(java.util.concurrent.Executor) Organization(alfio.model.user.Organization) TemplateManager(alfio.util.TemplateManager) Collectors(java.util.stream.Collectors) Executors(java.util.concurrent.Executors) TicketReservationManager(alfio.manager.TicketReservationManager) TicketCategory(alfio.model.TicketCategory) Component(org.springframework.stereotype.Component) EventManager(alfio.manager.EventManager) StringUtils.isNotBlank(org.apache.commons.lang3.StringUtils.isNotBlank) Ticket(alfio.model.Ticket) NotificationManager(alfio.manager.NotificationManager) TicketReservation(alfio.model.TicketReservation) Log4j2(lombok.extern.log4j.Log4j2) Event(alfio.model.Event) ExtendedModelMap(org.springframework.ui.ExtendedModelMap) Ticket(alfio.model.Ticket) Organization(alfio.model.user.Organization) ExtendedModelMap(org.springframework.ui.ExtendedModelMap) MessageModification(alfio.model.modification.MessageModification) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Model(org.springframework.ui.Model) Event(alfio.model.Event)

Example 59 with Event

use of alfio.model.Event in project alf.io by alfio-event.

the class ConfigurationManager method saveAllEventConfiguration.

public void saveAllEventConfiguration(int eventId, int organizationId, List<ConfigurationModification> list, String username) {
    User user = userManager.findUserByUsername(username);
    Validate.isTrue(userManager.isOwnerOfOrganization(user, organizationId), "Cannot update settings, user is not owner");
    Event event = eventRepository.findById(eventId);
    Validate.notNull(event, "event does not exist");
    if (organizationId != event.getOrganizationId()) {
        Validate.isTrue(userManager.isOwnerOfOrganization(user, event.getOrganizationId()), "Cannot update settings, user is not owner of event");
    }
    list.stream().filter(TO_BE_SAVED).forEach(c -> saveEventConfiguration(eventId, organizationId, c.getKey(), c.getValue()));
}
Also used : User(alfio.model.user.User) Event(alfio.model.Event)

Example 60 with Event

use of alfio.model.Event in project alf.io by alfio-event.

the class ConfigurationManager method loadEventConfig.

public Map<ConfigurationKeys.SettingCategory, List<Configuration>> loadEventConfig(int eventId, String username) {
    User user = userManager.findUserByUsername(username);
    Event event = eventRepository.findById(eventId);
    int organizationId = event.getOrganizationId();
    if (!userManager.isOwnerOfOrganization(user, organizationId)) {
        return Collections.emptyMap();
    }
    boolean isAdmin = userManager.isAdmin(user);
    Map<ConfigurationKeys.SettingCategory, List<Configuration>> existing = configurationRepository.findEventConfiguration(organizationId, eventId).stream().filter(checkActualConfigurationLevel(isAdmin, EVENT)).sorted().collect(groupByCategory());
    boolean offlineCheckInEnabled = areBooleanSettingsEnabledForEvent(ALFIO_PI_INTEGRATION_ENABLED, OFFLINE_CHECKIN_ENABLED).test(event);
    return removeAlfioPISettingsIfNeeded(offlineCheckInEnabled, groupByCategory(isAdmin ? union(SYSTEM, EVENT) : EVENT_CONFIGURATION, existing));
}
Also used : User(alfio.model.user.User) Event(alfio.model.Event)

Aggregations

Event (alfio.model.Event)71 Test (org.junit.Test)28 Ticket (alfio.model.Ticket)24 TicketCategory (alfio.model.TicketCategory)21 Organization (alfio.model.user.Organization)13 java.util (java.util)11 ZonedDateTime (java.time.ZonedDateTime)10 Autowired (org.springframework.beans.factory.annotation.Autowired)10 BigDecimal (java.math.BigDecimal)9 TicketReservation (alfio.model.TicketReservation)7 ConfigurationKeys (alfio.model.system.ConfigurationKeys)7 Collectors (java.util.stream.Collectors)7 Log4j2 (lombok.extern.log4j.Log4j2)7 StringUtils (org.apache.commons.lang3.StringUtils)7 ConfigurationManager (alfio.manager.system.ConfigurationManager)6 Configuration (alfio.model.system.Configuration)5 TicketRepository (alfio.repository.TicketRepository)5 Pair (org.apache.commons.lang3.tuple.Pair)5 Triple (org.apache.commons.lang3.tuple.Triple)5 UserManager (alfio.manager.user.UserManager)4