package com.ssbusy.module; import java.math.BigDecimal; import java.util.Date; import javax.annotation.Resource; import org.broadleafcommerce.common.currency.domain.BroadleafCurrency; import org.broadleafcommerce.common.money.Money; import org.broadleafcommerce.core.payment.domain.PaymentResponseItem; import org.broadleafcommerce.core.payment.service.PaymentContext; import org.broadleafcommerce.core.payment.service.exception.PaymentException; import org.broadleafcommerce.core.payment.service.module.AbstractModule; import org.broadleafcommerce.core.payment.service.type.PaymentInfoType; import com.ssbusy.core.account.service.BalanceChangeType; import com.ssbusy.core.account.service.MyCustomerService; import com.ssbusy.payment.service.type.MyPaymentInfoType; public class BpPaymentModule extends AbstractModule { @Resource(name = "blCustomerService") private MyCustomerService customerservice; @Override public Boolean isValidCandidate(PaymentInfoType paymentType) { return MyPaymentInfoType.Payment_Bp.equals(paymentType); } @Override public PaymentResponseItem processReverseAuthorize( PaymentContext paymentContext, Money amountToReverseAuthorize, PaymentResponseItem responseItem) throws PaymentException { return responseItem; } @Override public PaymentResponseItem processAuthorize(PaymentContext paymentContext, Money amountToAuthorize, PaymentResponseItem responseItem) throws PaymentException { return responseItem; } @Override public PaymentResponseItem processDebit(PaymentContext paymentContext, Money amountToDebit, PaymentResponseItem responseItem) throws PaymentException { return responseItem; } @Override public PaymentResponseItem processAuthorizeAndDebit( PaymentContext paymentContext, Money amountToDebit, PaymentResponseItem responseItem) throws PaymentException { Money total = paymentContext.getPaymentInfo().getAmount(); BroadleafCurrency currency = paymentContext.getPaymentInfo().getOrder() .getCurrency(); Long customerid = paymentContext.getPaymentInfo().getOrder() .getCustomer().getId(); BigDecimal balance = customerservice.getCustomerBalance(customerid); responseItem.setTransactionTimestamp(new Date()); if (total.getAmount().compareTo(balance) > 0) { responseItem.setTransactionSuccess(false); Money m = new Money(currency); responseItem.setTransactionAmount(m); } else { if( customerservice.payFromBalance(customerid, total.getAmount(), BalanceChangeType.PAYFROMBALANCE)){ responseItem.setTransactionSuccess(true); responseItem.setTransactionAmount(total); responseItem.setCurrency(currency); }else{ responseItem.setTransactionSuccess(false); Money m = new Money(currency); responseItem.setTransactionAmount(m); } } return responseItem; } @Override public PaymentResponseItem processCredit(PaymentContext paymentContext, Money amountToCredit, PaymentResponseItem responseItem) throws PaymentException { return responseItem; } @Override public PaymentResponseItem processVoidPayment( PaymentContext paymentContext, Money amountToVoid, PaymentResponseItem responseItem) throws PaymentException { if (amountToVoid.greaterThan(Money.ZERO)) { return credit(paymentContext); } else { return reverseAuthorize(paymentContext); } } @Override public PaymentResponseItem processBalance(PaymentContext paymentContext, PaymentResponseItem responseItem) throws PaymentException { return responseItem; } @Override public PaymentResponseItem processPartialPayment( PaymentContext paymentContext, Money amountToDebit, PaymentResponseItem responseItem) throws PaymentException { return responseItem; } }