/** * OLAT - Online Learning and Training<br> * http://www.olat.org * <p> * Licensed under the Apache License, Version 2.0 (the "License"); <br> * you may not use this file except in compliance with the License.<br> * You may obtain a copy of the License at * <p> * http://www.apache.org/licenses/LICENSE-2.0 * <p> * Unless required by applicable law or agreed to in writing,<br> * software distributed under the License is distributed on an "AS IS" BASIS, <br> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> * See the License for the specific language governing permissions and <br> * limitations under the License. * <p> * Copyright (c) frentix GmbH<br> * http://www.frentix.com<br> * <p> */ package org.olat.resource.accesscontrol.provider.paypal.model; import java.util.Date; import org.olat.core.commons.persistence.PersistentObject; import org.olat.core.util.StringHelper; import org.olat.resource.accesscontrol.Price; import org.olat.resource.accesscontrol.model.PSPTransaction; import org.olat.resource.accesscontrol.model.PSPTransactionStatus; /** * * Description:<br> * Log the paypal transaction and persist them * * <P> * Initial Date: 26 mai 2011 <br> * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com */ public class PaypalTransaction extends PersistentObject implements PSPTransaction { private static final long serialVersionUID = -8111089587194349398L; private String payKey; private String refNo; private String status; private String secureSuccessUUID; private String secureCancelUUID; private Price securePrice; private Long orderId; private Long orderPartId; private Long methodId; private String ack; private String build; private String coorelationId; private Date payResponseDate; private String paymentExecStatus; //IPN private String transactionId; private String senderTransactionId; private String senderEmail; private String verifySign; private String senderTransactionStatus; private String transactionStatus; private String pendingReason; public String getPayKey() { return payKey; } public void setPayKey(String payKey) { this.payKey = payKey; } public String getRefNo() { return refNo; } public void setRefNo(String refNo) { this.refNo = refNo; } public PaypalTransactionStatus getStatus() { if(StringHelper.containsNonWhitespace(status)) { if("CANCELLED".equals(status)) { return PaypalTransactionStatus.CANCELED; } return PaypalTransactionStatus.valueOf(status); } return null; } public void setStatus(PaypalTransactionStatus state) { if(state == null) { status = null; } else { status = state.name(); } } public String getStatusStr() { return status; } public void setStatusStr(String status) { this.status = status; } @Override public PSPTransactionStatus getSimplifiedStatus() { boolean warning = false; boolean error = false; if(getStatus() == PaypalTransactionStatus.SUCCESS || getStatus() == PaypalTransactionStatus.NEW || getStatus() == PaypalTransactionStatus.CANCELED) { // } if(getStatus() == PaypalTransactionStatus.DENIED || getStatus() == PaypalTransactionStatus.ERROR) { error = true; } if(getStatus() == PaypalTransactionStatus.PENDING || getStatus() == PaypalTransactionStatus.PREPAYMENT) { warning = true; } //SUCCESS – The sender’s transaction has completed //PENDING – The transaction is awaiting further processing //CREATED – The payment request was received; funds will be transferred //PARTIALLY_REFUNDED– Transaction was partially refunded //DENIED – The transaction was rejected by the receiver //PROCESSING – The transaction is in progress //REVERSED – The payment was returned to the sender //null, Success, Pending -> authorize //receiver status if(transactionStatus == null || "PENDING".equalsIgnoreCase(transactionStatus)) { warning = true; } if("DENIED".equalsIgnoreCase(transactionStatus)) { error = true; } //sender status if(senderTransactionStatus == null || "PENDING".equalsIgnoreCase(senderTransactionStatus)) { warning = true; } if("DENIED".equalsIgnoreCase(senderTransactionStatus)) { error = true; } if(error) { return PSPTransactionStatus.ERROR; } if (warning) { return PSPTransactionStatus.WARNING; } return PSPTransactionStatus.OK; } @Override public Long getOrderId() { return orderId; } public void setOrderId(Long orderId) { this.orderId = orderId; } @Override public Long getOrderPartId() { return orderPartId; } public void setOrderPartId(Long orderPartId) { this.orderPartId = orderPartId; } public Long getMethodId() { return methodId; } public void setMethodId(Long methodId) { this.methodId = methodId; } public String getTransactionId() { return transactionId; } public void setTransactionId(String transactionId) { this.transactionId = transactionId; } public String getSenderTransactionId() { return senderTransactionId; } public void setSenderTransactionId(String senderTransactionId) { this.senderTransactionId = senderTransactionId; } public String getSenderEmail() { return senderEmail; } public void setSenderEmail(String senderEmail) { this.senderEmail = senderEmail; } public String getVerifySign() { return verifySign; } public void setVerifySign(String verifySign) { this.verifySign = verifySign; } public String getSenderTransactionStatus() { return senderTransactionStatus; } public void setSenderTransactionStatus(String senderTransactionStatus) { this.senderTransactionStatus = senderTransactionStatus; } public String getTransactionStatus() { return transactionStatus; } public void setTransactionStatus(String transactionStatus) { this.transactionStatus = transactionStatus; } public String getPendingReason() { return pendingReason; } public void setPendingReason(String pendingReason) { this.pendingReason = pendingReason; } public String getAck() { return ack; } public void setAck(String ack) { this.ack = ack; } public String getBuild() { return build; } public void setBuild(String build) { this.build = build; } public String getCoorelationId() { return coorelationId; } public void setCoorelationId(String coorelationId) { this.coorelationId = coorelationId; } public Date getPayResponseDate() { return payResponseDate; } public void setPayResponseDate(Date payResponseDate) { this.payResponseDate = payResponseDate; } public String getPaymentExecStatus() { return paymentExecStatus; } public void setPaymentExecStatus(String paymentExecStatus) { this.paymentExecStatus = paymentExecStatus; } public String getSecureSuccessUUID() { return secureSuccessUUID; } public void setSecureSuccessUUID(String secureSuccessUUID) { this.secureSuccessUUID = secureSuccessUUID; } public String getSecureCancelUUID() { return secureCancelUUID; } public void setSecureCancelUUID(String secureCancelUUID) { this.secureCancelUUID = secureCancelUUID; } public Price getSecurePrice() { return securePrice; } public void setSecurePrice(Price securePrice) { this.securePrice = securePrice; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("PaypalTransaction[key=").append(getKey()).append("]") .append("[successUUID=").append(secureSuccessUUID).append("]") .append("[cancelUUID=").append(secureCancelUUID).append("]") .append("[price=").append(securePrice).append("]") //order .append("[orderId=").append(orderId).append("]") .append("[orderPartId=").append(orderPartId).append("]") .append("[methodId=").append(methodId).append("]") //pay request .append("[payKey=").append(payKey).append("]") .append("[ack=").append(ack).append("]") .append("[paymentExecStatus=").append(paymentExecStatus).append("]") .append("[payResponseDate=").append(payResponseDate).append("]") //ipn .append("[transactionId=").append(transactionId).append("]") .append("[transactionStatus=").append(transactionStatus).append("]") .append("[senderTransactionId=").append(senderTransactionId).append("]") .append("[senderTransactionStatus=").append(senderTransactionStatus).append("]") .append("[senderEmail=").append(senderEmail).append("]") .append("[verifySign=").append(verifySign).append("]"); if(StringHelper.containsNonWhitespace(pendingReason)) { sb.append("[pendingReason=").append(pendingReason).append("]"); } return sb.toString(); } @Override public int hashCode() { return getKey() == null ? 28062 : getKey().hashCode(); } @Override public boolean equals(Object obj) { if(this == obj) { return true; } if(obj instanceof PaypalTransaction) { PaypalTransaction transaction = (PaypalTransaction)obj; return equalsByPersistableKey(transaction); } return false; } }