Search in sources :

Example 16 with Event

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

the class PaypalManager method getInfo.

Optional<PaymentInformation> getInfo(String paymentId, String transactionId, Event event, Supplier<String> platformFeeSupplier) {
    try {
        String refund = null;
        APIContext apiContext = getApiContext(event);
        // check for backward compatibility  reason...
        if (paymentId != null) {
            // navigate in all refund objects and sum their amount
            refund = Payment.get(apiContext, paymentId).getTransactions().stream().map(Transaction::getRelatedResources).flatMap(List::stream).filter(f -> f.getRefund() != null).map(RelatedResources::getRefund).map(Refund::getAmount).map(Amount::getTotal).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString();
        // 
        }
        Capture c = Capture.get(apiContext, transactionId);
        String gatewayFee = Optional.ofNullable(c.getTransactionFee()).map(Currency::getValue).map(BigDecimal::new).map(MonetaryUtil::unitToCents).map(String::valueOf).orElse(null);
        return Optional.of(new PaymentInformation(c.getAmount().getTotal(), refund, gatewayFee, platformFeeSupplier.get()));
    } catch (PayPalRESTException ex) {
        log.warn("Paypal: error while fetching information for payment id " + transactionId, ex);
        return Optional.empty();
    }
}
Also used : UriComponentsBuilder(org.springframework.web.util.UriComponentsBuilder) java.util(java.util) MessageDigest(java.security.MessageDigest) TicketReservationRepository(alfio.repository.TicketReservationRepository) ConfigurationManager(alfio.manager.system.ConfigurationManager) Cache(com.github.benmanes.caffeine.cache.Cache) StringUtils(org.apache.commons.lang3.StringUtils) Supplier(java.util.function.Supplier) com.paypal.api.payments(com.paypal.api.payments) BigDecimal(java.math.BigDecimal) MonetaryUtil.formatCents(alfio.util.MonetaryUtil.formatCents) Pair(org.apache.commons.lang3.tuple.Pair) APIContext(com.paypal.base.rest.APIContext) HmacAlgorithms(org.apache.commons.codec.digest.HmacAlgorithms) MessageSource(org.springframework.context.MessageSource) Caffeine(com.github.benmanes.caffeine.cache.Caffeine) TicketRepository(alfio.repository.TicketRepository) HmacUtils(org.apache.commons.codec.digest.HmacUtils) Currency(com.paypal.api.payments.Currency) FeeCalculator(alfio.manager.support.FeeCalculator) PayPalRESTException(com.paypal.base.rest.PayPalRESTException) StandardCharsets(java.nio.charset.StandardCharsets) DateUtils(org.apache.commons.lang3.time.DateUtils) TimeUnit(java.util.concurrent.TimeUnit) Component(org.springframework.stereotype.Component) MonetaryUtil(alfio.util.MonetaryUtil) alfio.model(alfio.model) Configuration(alfio.model.system.Configuration) Log4j2(lombok.extern.log4j.Log4j2) Event(alfio.model.Event) AllArgsConstructor(lombok.AllArgsConstructor) DigestUtils(org.apache.commons.codec.digest.DigestUtils) ConfigurationKeys(alfio.model.system.ConfigurationKeys) Currency(com.paypal.api.payments.Currency) MonetaryUtil(alfio.util.MonetaryUtil) APIContext(com.paypal.base.rest.APIContext) PayPalRESTException(com.paypal.base.rest.PayPalRESTException) BigDecimal(java.math.BigDecimal)

Example 17 with Event

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

the class PaypalManager method createCheckoutRequest.

public String createCheckoutRequest(Event event, String reservationId, OrderSummary orderSummary, CustomerName customerName, String email, String billingAddress, Locale locale, boolean postponeAssignment, boolean invoiceRequested) throws Exception {
    APIContext apiContext = getApiContext(event);
    Optional<String> experienceProfileId = getOrCreateWebProfile(event, locale, apiContext);
    List<Transaction> transactions = buildPaymentDetails(event, orderSummary, reservationId, locale);
    String eventName = event.getShortName();
    Payer payer = new Payer();
    payer.setPaymentMethod("paypal");
    Payment payment = new Payment();
    payment.setIntent("sale");
    payment.setPayer(payer);
    payment.setTransactions(transactions);
    RedirectUrls redirectUrls = new RedirectUrls();
    String baseUrl = StringUtils.removeEnd(configurationManager.getRequiredValue(Configuration.from(event.getOrganizationId(), event.getId(), ConfigurationKeys.BASE_URL)), "/");
    String bookUrl = baseUrl + "/event/" + eventName + "/reservation/" + reservationId + "/book";
    UriComponentsBuilder bookUrlBuilder = UriComponentsBuilder.fromUriString(bookUrl).queryParam("fullName", customerName.getFullName()).queryParam("firstName", customerName.getFirstName()).queryParam("lastName", customerName.getLastName()).queryParam("email", email).queryParam("billingAddress", billingAddress).queryParam("postponeAssignment", postponeAssignment).queryParam("invoiceRequested", invoiceRequested).queryParam("hmac", computeHMAC(customerName, email, billingAddress, event));
    String finalUrl = bookUrlBuilder.toUriString();
    redirectUrls.setCancelUrl(finalUrl + "&paypal-cancel=true");
    redirectUrls.setReturnUrl(finalUrl + "&paypal-success=true");
    payment.setRedirectUrls(redirectUrls);
    experienceProfileId.ifPresent(payment::setExperienceProfileId);
    Payment createdPayment = payment.create(apiContext);
    TicketReservation reservation = ticketReservationRepository.findReservationById(reservationId);
    // add 15 minutes of validity in case the paypal flow is slow
    ticketReservationRepository.updateValidity(reservationId, DateUtils.addMinutes(reservation.getValidity(), 15));
    if (!"created".equals(createdPayment.getState())) {
        throw new Exception(createdPayment.getFailureReason());
    }
    // extract url for approval
    return createdPayment.getLinks().stream().filter(l -> "approval_url".equals(l.getRel())).findFirst().map(Links::getHref).orElseThrow(IllegalStateException::new);
}
Also used : UriComponentsBuilder(org.springframework.web.util.UriComponentsBuilder) java.util(java.util) MessageDigest(java.security.MessageDigest) TicketReservationRepository(alfio.repository.TicketReservationRepository) ConfigurationManager(alfio.manager.system.ConfigurationManager) Cache(com.github.benmanes.caffeine.cache.Cache) StringUtils(org.apache.commons.lang3.StringUtils) Supplier(java.util.function.Supplier) com.paypal.api.payments(com.paypal.api.payments) BigDecimal(java.math.BigDecimal) MonetaryUtil.formatCents(alfio.util.MonetaryUtil.formatCents) Pair(org.apache.commons.lang3.tuple.Pair) APIContext(com.paypal.base.rest.APIContext) HmacAlgorithms(org.apache.commons.codec.digest.HmacAlgorithms) MessageSource(org.springframework.context.MessageSource) Caffeine(com.github.benmanes.caffeine.cache.Caffeine) TicketRepository(alfio.repository.TicketRepository) HmacUtils(org.apache.commons.codec.digest.HmacUtils) Currency(com.paypal.api.payments.Currency) FeeCalculator(alfio.manager.support.FeeCalculator) PayPalRESTException(com.paypal.base.rest.PayPalRESTException) StandardCharsets(java.nio.charset.StandardCharsets) DateUtils(org.apache.commons.lang3.time.DateUtils) TimeUnit(java.util.concurrent.TimeUnit) Component(org.springframework.stereotype.Component) MonetaryUtil(alfio.util.MonetaryUtil) alfio.model(alfio.model) Configuration(alfio.model.system.Configuration) Log4j2(lombok.extern.log4j.Log4j2) Event(alfio.model.Event) AllArgsConstructor(lombok.AllArgsConstructor) DigestUtils(org.apache.commons.codec.digest.DigestUtils) ConfigurationKeys(alfio.model.system.ConfigurationKeys) PayPalRESTException(com.paypal.base.rest.PayPalRESTException) UriComponentsBuilder(org.springframework.web.util.UriComponentsBuilder) APIContext(com.paypal.base.rest.APIContext)

Example 18 with Event

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

the class SpecialPriceManager method clearRecipientData.

public boolean clearRecipientData(String eventName, int categoryId, int codeId, String username) {
    final Event event = eventManager.getSingleEvent(eventName, username);
    checkOwnership(categoryId, event, username);
    int result = specialPriceRepository.clearRecipientData(codeId, categoryId);
    Validate.isTrue(result <= 1, "too many records affected");
    return result == 1;
}
Also used : Event(alfio.model.Event)

Example 19 with Event

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

the class SpecialPriceManager method linkAssigneeToCode.

public List<SendCodeModification> linkAssigneeToCode(List<SendCodeModification> input, String eventName, int categoryId, String username) {
    final Event event = eventManager.getSingleEvent(eventName, username);
    Set<SendCodeModification> set = new LinkedHashSet<>(input);
    List<String> availableCodes = checkCodeAssignment(set, categoryId, event, username);
    final Iterator<String> codes = availableCodes.iterator();
    return Stream.concat(set.stream().filter(IS_CODE_PRESENT), input.stream().filter(IS_CODE_PRESENT.negate()).map(p -> new SendCodeModification(codes.next(), p.getAssignee(), p.getEmail(), p.getLanguage()))).collect(toList());
}
Also used : Event(alfio.model.Event) SendCodeModification(alfio.model.modification.SendCodeModification)

Example 20 with Event

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

the class EventManagerIntegrationTest method testValidationBoundedFailedPendingTickets.

@Test
public void testValidationBoundedFailedPendingTickets() {
    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.getLeft();
    String username = pair.getRight();
    TicketCategory category = ticketCategoryRepository.findByEventId(event.getId()).get(0);
    Map<String, String> categoryDescription = ticketCategoryDescriptionRepository.descriptionForTicketCategory(category.getId());
    List<Integer> tickets = ticketRepository.selectTicketInCategoryForUpdate(event.getId(), category.getId(), 1, Collections.singletonList(Ticket.TicketStatus.FREE.name()));
    String reservationId = "12345678";
    ticketReservationRepository.createNewReservation(reservationId, DateUtils.addDays(new Date(), 1), null, "en", event.getId(), event.getVat(), event.isVatIncluded());
    ticketRepository.reserveTickets(reservationId, tickets, category.getId(), "en", 100);
    TicketCategoryModification tcm = new TicketCategoryModification(category.getId(), category.getName(), 10, DateTimeModification.fromZonedDateTime(category.getUtcInception()), DateTimeModification.fromZonedDateTime(category.getUtcExpiration()), categoryDescription, category.getPrice(), false, "", false, null, null, null, null, null);
    Result<TicketCategory> result = eventManager.updateCategory(category.getId(), event, tcm, username);
    assertFalse(result.isSuccess());
}
Also used : Event(alfio.model.Event) TicketCategory(alfio.model.TicketCategory) LocalDate(java.time.LocalDate) Test(org.junit.Test)

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