Subversion Repositories SmartDukaan

Rev

Rev 7390 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package in.shop2020.serving.controllers;

import in.shop2020.model.v1.order.RechargeOrder;
import in.shop2020.model.v1.order.RechargeOrderStatus;
import in.shop2020.model.v1.order.TransactionService.Client;
import in.shop2020.model.v1.order.TransactionServiceException;
import in.shop2020.model.v1.order.UserWallet;
import in.shop2020.payments.Attribute;
import in.shop2020.payments.Constants;
import in.shop2020.payments.Payment;
import in.shop2020.payments.PaymentException;
import in.shop2020.thrift.clients.PaymentClient;
import in.shop2020.thrift.clients.TransactionClient;
import in.shop2020.util.CRMConstants;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.log4j.Logger;
import org.apache.shiro.SecurityUtils;
import org.apache.thrift.TException;
import org.apache.thrift.transport.TTransportException;

public class RechargeOrderInfoController extends BaseController {
    
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    
    private static Logger log = Logger.getLogger(Class.class);
    private Long rechargeOrderId = null;
    private RechargeOrder rechargeOrder = null;
    //Start:- Code Commented by Manish Sharma for Hiding wallet amount at Recharge Order Page on June-05-2013
    private UserWallet wallet = null;
    private List<Payment> payments = null;
    //private long walletAmount;
    //End:- Code Commented by Manish Sharma for Hiding wallet amount at Recharge Order Page on June-05-2013
    
    private static List<RechargeOrderStatus> refundableRechargeStatusList = new ArrayList<RechargeOrderStatus>(Arrays.asList(new RechargeOrderStatus[] 
                                                                              {RechargeOrderStatus.RECHARGE_FAILED, 
                                                                               RechargeOrderStatus.RECHARGE_FAILED_REFUNDED,
                                                                               RechargeOrderStatus.PAYMENT_SUCCESSFUL}));
    
    public String index() {
        try {
            PaymentClient paymentServiceClient = new PaymentClient();
            TransactionClient transactionServiceClient = new TransactionClient();
            Client tclient = transactionServiceClient.getClient();
            rechargeOrder = tclient.getRechargeOrder(rechargeOrderId);
            wallet = tclient.getUserWallet(rechargeOrder.getUserId());
            //Start:- Code Commented by Manish Sharma for Hiding wallet amount at Recharge Order Page on June-05-2013
            //setWalletAmount(wallet.getAmount());
            //End:- Code Commented by Manish Sharma for Hiding wallet amount at Recharge Order Page on June-05-2013
            payments = paymentServiceClient.getClient().getPaymentForRechargeTxnId(rechargeOrder.getTransactionId());

        } catch (TTransportException e) {
            log.error("Unable to create thrift Client", e);
        } catch (TransactionServiceException e) {
            addActionError("Invalid order id or no order selected.");
        } catch (TException e) {
            log.error("Unable to get thrift Client", e);
        } catch (PaymentException e) {
            log.error("Unable to get payments for transctionId : " + rechargeOrder.getTransactionId(), e);
        }
        return INDEX;
    }
    
    public String refundRechargeOrder() {
        try {
            TransactionClient transactionServiceClient = new TransactionClient();
            if(!transactionServiceClient.getClient().refundRechargeOrder(rechargeOrderId)) {
                return "refund-failed";
            }
        } catch (Exception e) {
            log.error("Unable to refund rechargeOrder : " + rechargeOrderId, e);
        }
        return index();
    }
    
    public boolean showRefundButton() {
        RechargeOrderStatus status = rechargeOrder.getStatus();
        if (refundableRechargeStatusList.contains(status) && wallet.getAmount() > 0 && (rechargeOrder.getWalletAmount() != (rechargeOrder.getTotalAmount() - rechargeOrder.getCouponAmount()))) {
            return (SecurityUtils.getSubject().hasRole("Outbound") && SecurityUtils.getSubject().hasRole("TeamLead"));
        }
        return false;
    }

    public Long getRechargeOrderId() {
        return rechargeOrderId;
    }

    public void setRechargeOrderId(Long rechargeOrderId) {
        this.rechargeOrderId = rechargeOrderId;
    }
    
    public String getProviderName(Long operatorId) {
        return providersMap.get(operatorId);
    }

    public RechargeOrder getRechargeOrder() {
        return rechargeOrder;
    }

    public void setRechargeOrder(RechargeOrder rechargeOrder) {
        this.rechargeOrder = rechargeOrder;
    }

    public List<Payment> getPayments() {
        return payments;
    }

    public void setPayments(List<Payment> payments) {
        this.payments = payments;
    }
    //Start:- Code Commented by Manish Sharma for Hiding wallet amount at Recharge Order Page on June-05-2013
        //public void setWalletAmount(long walletAmount) {
        //      this.walletAmount = walletAmount;
        //}

        //public long getWalletAmount() {
        //      return walletAmount;
        //}
    //End:- Code Commented by Manish Sharma for Hiding wallet amount at Recharge Order Page on June-05-2013
    
    public UserWallet getWallet() {
        return wallet;
    }

    public void setWallet(UserWallet wallet) {
        this.wallet = wallet;
    }
    
    public String getGatewayName(Payment payment){
        return CRMConstants.PAYMENT_GATEWAYS.get(payment.getGatewayId());
    }
    
    public String getPaymentMethod(List<Attribute> paymentAttributes) {
        String paymentMethod = null;
        if (paymentAttributes == null || paymentAttributes.isEmpty()) {
            return "N/A";
        }
        for (Attribute a : paymentAttributes) {
            if ("payMethod".equals(a.getName())) {
                paymentMethod = Constants.PAYMENT_METHOD.get(a.getValue());
                break;
            }
        }
        return paymentMethod != null ? paymentMethod : "N/A";
    }
    
}