use of org.olat.resource.accesscontrol.Order in project OpenOLAT by OpenOLAT.
the class PaypalManagerImpl method cancelTransaction.
private synchronized void cancelTransaction(PaypalTransaction trx) {
if (trx.getStatus() == PaypalTransactionStatus.SUCCESS || trx.getStatus() == PaypalTransactionStatus.CANCELED) {
// already completed: if successed -> let it in this state
return;
}
updateTransaction(trx, PaypalTransactionStatus.CANCELED);
Order order = orderManager.loadOrderByNr(trx.getRefNo());
orderManager.save(order, OrderStatus.CANCELED);
// cancel the reservations
Identity identity = order.getDelivery();
for (OrderPart part : order.getParts()) {
if (part.getKey().equals(trx.getOrderPartId())) {
for (OrderLine line : part.getOrderLines()) {
OLATResource resource = line.getOffer().getResource();
ResourceReservation reservation = acService.getReservation(identity, resource);
if (reservation != null) {
acService.removeReservation(identity, identity, reservation);
log.audit("Remove reservation after cancellation for: " + reservation + " to " + identity, null);
}
}
}
}
}
use of org.olat.resource.accesscontrol.Order in project OpenOLAT by OpenOLAT.
the class PaypalManagerImpl method request.
public PayResponse request(Identity delivery, OfferAccess offerAccess, String mapperUri, String sessionId) {
StringBuilder url = new StringBuilder();
url.append(Settings.createServerURI()).append(mapperUri);
Offer offer = offerAccess.getOffer();
Price amount = offer.getPrice();
Order order = orderManager.saveOneClick(delivery, offerAccess, OrderStatus.PREPAYMENT);
PaypalTransaction trx = createAndPersistTransaction(amount, order, order.getParts().get(0), offerAccess.getMethod());
// !!!! make a trace of the process
dbInstance.commit();
ReceiverList list = new ReceiverList();
Receiver rec1 = new Receiver();
rec1.setAmount(amount.getAmount().doubleValue());
rec1.setEmail(paypalModule.getPaypalFirstReceiverEmailAddress());
rec1.setInvoiceId(order.getOrderNr());
list.getReceiver().add(rec1);
String returnURL = url.toString() + "/" + trx.getSecureSuccessUUID() + ".html;jsessionid=" + sessionId + "?status=success";
String cancelURL = url.toString() + "/" + trx.getSecureCancelUUID() + ".html;jsessionid=" + sessionId + "?status=cancel";
PayRequest payRequest = new PayRequest();
payRequest.setCancelUrl(cancelURL);
payRequest.setReturnUrl(returnURL);
payRequest.setTrackingId(order.getOrderNr());
payRequest.setCurrencyCode(amount.getCurrencyCode());
payRequest.setClientDetails(getAppDetails());
payRequest.setReceiverList(list);
payRequest.setRequestEnvelope(getAppRequestEnvelope());
payRequest.setActionType("PAY");
payRequest.setIpnNotificationUrl(Settings.getServerContextPathURI() + "/paypal/ipn");
PayResponse payResp = null;
try {
AdaptivePaymentsService ap = new AdaptivePaymentsService(getAccountProperties());
payResp = ap.pay(payRequest);
log.audit("Paypal send PayRequest: " + (payResp == null ? "no response" : payResp.getPayKey() + "/" + payResp.getPaymentExecStatus()));
return payResp;
} catch (SSLConfigurationException e) {
log.error("Paypal error", e);
} catch (InvalidCredentialException e) {
log.error("Paypal error", e);
} catch (UnsupportedEncodingException e) {
log.error("Paypal error", e);
} catch (HttpErrorException e) {
log.error("Paypal error", e);
} catch (InvalidResponseDataException e) {
log.error("Paypal error", e);
} catch (ClientActionRequiredException e) {
log.error("Paypal error", e);
} catch (MissingCredentialException e) {
log.error("Paypal error", e);
} catch (OAuthException e) {
log.error("Paypal error", e);
} catch (IOException | InterruptedException e) {
log.error("Paypal error", e);
} catch (Exception e) {
log.error("Paypal error", e);
} finally {
if (payResp == null) {
updateTransaction(trx, PaypalTransactionStatus.ERROR);
} else {
updateTransaction(payResp, trx);
}
}
return null;
}
use of org.olat.resource.accesscontrol.Order in project OpenOLAT by OpenOLAT.
the class PaypalManagerImpl method completeTransactionSucessfully.
private void completeTransactionSucessfully(PaypalTransaction trx, String trxStatus) {
Order order = orderManager.loadOrderByNr(trx.getRefNo());
if ("PENDING".equalsIgnoreCase(trxStatus)) {
updateTransaction(trx, PaypalTransactionStatus.PENDING);
} else {
updateTransaction(trx, PaypalTransactionStatus.SUCCESS);
}
order = orderManager.save(order, OrderStatus.PAYED);
PaypalAccessMethod method = getMethodSecure(trx.getMethodId());
if (order.getKey().equals(trx.getOrderId())) {
// make accessible
Identity identity = order.getDelivery();
for (OrderPart part : order.getParts()) {
if (part.getKey().equals(trx.getOrderPartId())) {
AccessTransaction transaction = transactionManager.createTransaction(order, part, method);
transaction = transactionManager.save(transaction);
for (OrderLine line : part.getOrderLines()) {
if (acService.allowAccesToResource(identity, line.getOffer())) {
log.audit("Paypal payed access granted for: " + buildLogMessage(line, method) + " to " + identity, null);
transaction = transactionManager.update(transaction, AccessTransactionStatus.SUCCESS);
} else {
log.error("Paypal payed access refused for: " + buildLogMessage(line, method) + " to " + identity, null);
transaction = transactionManager.update(transaction, AccessTransactionStatus.ERROR);
}
}
}
}
} else {
log.error("Order not in sync with PaypalTransaction", null);
}
}
use of org.olat.resource.accesscontrol.Order in project OpenOLAT by OpenOLAT.
the class ACFrontendManager method accessResource.
@Override
public AccessResult accessResource(Identity identity, OfferAccess link, Object argument) {
if (link == null || link.getOffer() == null || link.getMethod() == null) {
log.audit("Access refused (no offer) to: " + link + " for " + identity);
return new AccessResult(false);
}
AccessMethodHandler handler = accessModule.getAccessMethodHandler(link.getMethod().getType());
if (handler == null) {
log.audit("Access refused (no handler method) to: " + link + " for " + identity);
return new AccessResult(false);
}
if (handler.checkArgument(link, argument)) {
if (allowAccesToResource(identity, link.getOffer())) {
Order order = orderManager.saveOneClick(identity, link);
AccessTransaction transaction = transactionManager.createTransaction(order, order.getParts().get(0), link.getMethod());
transactionManager.save(transaction);
dbInstance.commit();
log.audit("Access granted to: " + link + " for " + identity);
return new AccessResult(true);
} else {
log.audit("Access error to: " + link + " for " + identity);
}
} else {
log.audit("Access refused to: " + link + " for " + identity);
}
return new AccessResult(false);
}
use of org.olat.resource.accesscontrol.Order in project OpenOLAT by OpenOLAT.
the class ACOrderDAO method findOrdersByResource.
public List<Order> findOrdersByResource(OLATResource resource, OrderStatus... status) {
StringBuilder sb = new StringBuilder();
sb.append("select distinct(o) from ").append(OrderImpl.class.getName()).append(" o").append(" inner join o.parts orderPart ").append(" inner join orderPart.lines orderLine ").append(" inner join orderLine.offer offer ").append(" where offer.resource.key=:resourceKey");
if (status != null && status.length > 0) {
sb.append(" and o.orderStatusStr in (:status)");
}
TypedQuery<Order> query = dbInstance.getCurrentEntityManager().createQuery(sb.toString(), Order.class).setParameter("resourceKey", resource.getKey());
if (status != null && status.length > 0) {
List<String> statusStr = new ArrayList<String>();
for (OrderStatus s : status) {
statusStr.add(s.name());
}
query.setParameter("status", statusStr);
}
return query.getResultList();
}
Aggregations