Subversion Repositories SmartDukaan

Rev

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

package in.shop2020.serving.utils;

import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

import in.shop2020.model.v1.order.EmiScheme;
import in.shop2020.model.v1.order.TransactionService.Client;
import in.shop2020.serving.controllers.ProceedToPayController;
import in.shop2020.serving.services.IPaymentService;
import in.shop2020.thrift.clients.TransactionClient;

/**
 * class  that provides utility and 
 * contants related to payment
 */
public class PaymentUtils {
        
        private static List<EmiScheme> emiSchemes;
        private static Logger logger = Logger.getLogger(PaymentUtils.class);
        
        public static enum PAYMENT_TYPE{
                NB,CC,DC,WAL,COD,CAS,EMI
        } 
        
        
    @SuppressWarnings("serial")
        public static final Map<String, String> PAYU_NET_BANKING_CODES_MAP = Collections.unmodifiableMap(
                new HashMap<String, String>(){
                        {
                                put("1004","AXIB");
                                put("1135","CRPB");
                                put("1029","FEDB");
                                put("1007","HDFB");
                                put("1016","ICIB");
                                put("1032","SBIB");
                                put("1034","SBHB");
                                put("1038","SBMB");
                                put("1035","SBMB");
                                put("1039","SBTB");
                                put("1127","CITNB");
                                put("1033","SBBJB");
                                //Oriental Bank of Commerce
                                //put("1154","");
                                put("1147","CBIB");
                                put("1146","YESB");
                                put("1214","BOIB");
                                put("1215","CUBB");
                                put("1212","UNIB");
                                put("1224","CABB");
                                put("1210","INGB");
                                put("1148","162B");
                                put("1273","DLSB");
                                put("1015","JAKB");
                                put("1133","KRKB");
                                put("1143","INDB");
                                put("1216","UBIB");
                                put("1213","INOB");
                                put("1229","BOMB");
                                put("1601","CSBN");
                                put("1602","DCBB");
                                put("1603","DSHB");
                                put("1604","IDBB");
                                put("1605","INIB");
                                put("1606","KRVB");
                                put("1607","PNBB");
                                put("1608","SOIB");
                                put("1609","SRSWT");
                                put("1610","VJYB");
                                put("1611","DCBCORP");
                                put("1612","UBIBC");
                                put("1613","CPNB");
                        }
                });
    
    @SuppressWarnings("serial")
        public static final Map<String, String> PAYU_CREDIT_CARD_CODES_MAP = Collections.unmodifiableMap(
                new HashMap<String, String>(){
                        {
                                put("2008","CC");
                                put("2017","CC");
                                put("2028","AMEX");
                                put("1010","DINR");
                        }
                });

    @SuppressWarnings("serial")
        public static final Map<String, String> PAYU_DEBIT_CARD_CODES_MAP = Collections.unmodifiableMap(
                new HashMap<String, String>(){
                        {
                                put("2000","VISA");
                                put("2018","MAST");
                                put("1009","MAST");
                                put("2038","RUPAY");
                                put("SMAE","SMAE");
                                put("1164","MAES");
                        }
                });
    public static final String PAYU_CC = "4001";
    
    public static String getPayubankCode(String paymentOptions){
        String payCode = "";
        if (paymentOptions.startsWith(PaymentUtils.PAYMENT_TYPE.CC.toString())) {
                payCode = paymentOptions.replace(PaymentUtils.PAYMENT_TYPE.CC.toString(),"");
                        return PAYU_CREDIT_CARD_CODES_MAP.get(payCode);
                }
        if (paymentOptions.startsWith(PaymentUtils.PAYMENT_TYPE.DC.toString())) {
                payCode = paymentOptions.replace(PaymentUtils.PAYMENT_TYPE.DC.toString(),"");
                        return PAYU_DEBIT_CARD_CODES_MAP.get(payCode);
                }
        if (paymentOptions.startsWith(PaymentUtils.PAYMENT_TYPE.NB.toString())) {
                payCode = paymentOptions.replace(PaymentUtils.PAYMENT_TYPE.NB.toString(),"");
                        return PAYU_NET_BANKING_CODES_MAP.get(payCode);
                }
        if (paymentOptions.startsWith(PaymentUtils.PAYMENT_TYPE.WAL.toString())) {
                payCode = paymentOptions.replace(PaymentUtils.PAYMENT_TYPE.NB.toString(),"");
                if(payCode.equals(PAYU_CC));
                        return "payuw";
                }
        
        return "";
    }
    
    public static String getPayugatewayCode(String paymentOptions){
        if (paymentOptions.startsWith(PaymentUtils.PAYMENT_TYPE.CC.toString())) {
                        return PaymentUtils.PAYMENT_TYPE.CC.toString();
                }
        if (paymentOptions.startsWith(PaymentUtils.PAYMENT_TYPE.DC.toString())) {
                        return PaymentUtils.PAYMENT_TYPE.DC.toString();
                }
        if (paymentOptions.startsWith(PaymentUtils.PAYMENT_TYPE.NB.toString())) {
                        return PaymentUtils.PAYMENT_TYPE.NB.toString();
                }
        if (paymentOptions.startsWith(PaymentUtils.PAYMENT_TYPE.WAL.toString())) {
                        return "Wallet";
                }
        
        return "";
    }
    
        public static void populateEmiSchemes() {
                try {
                        Client tClient = new TransactionClient().getClient();
                        emiSchemes = tClient.getAvailableEmiSchemes();
                } catch (TTransportException e) {
                        logger.error("Error while getting EMI schemes: ", e);
                } catch (TException e) {
                        logger.error("Error while getting EMI schemes: ", e);
                }
        }

        public static List<EmiScheme> getEmiSchemes() {
                if (emiSchemes != null) {
                        return emiSchemes;
                } else {
                        populateEmiSchemes();
                        return emiSchemes;
                }
        }
        
        public static long getGatewayId(String paymentOptions) {
                String payCode = "";
                // checking for emis
                if (paymentOptions.startsWith(PaymentUtils.PAYMENT_TYPE.EMI.toString())) {
                        payCode = paymentOptions.replace(PaymentUtils.PAYMENT_TYPE.EMI.toString(), "");
                        for (EmiScheme scheme : getEmiSchemes()) {
                                if (scheme.getId() == Long.parseLong(payCode)) {
                                        return scheme.getGatewayId();
                                }
                        }
                }

                // As of on august 2 2016 all the debit,credit and netbanking payments
                // have to be redirected to payu.
                // so returning 13 as payment gateway
                // this can be re-written for other business logic
                if (paymentOptions.startsWith(PaymentUtils.PAYMENT_TYPE.CC.toString())) {
                        // payCode =
                        // paymentOptions.replace(PaymentUtils.PAYMENT_TYPE.CC.toString(),
                        // "");
                        return 5;

                }
                if (paymentOptions.startsWith(PaymentUtils.PAYMENT_TYPE.DC.toString())) {
                        // payCode =
                        // paymentOptions.replace(PaymentUtils.PAYMENT_TYPE.CC.toString(),
                        // "");
                        return 5;
                }
                if (paymentOptions.startsWith(PaymentUtils.PAYMENT_TYPE.NB.toString())) {
                        // payCode =
                        // paymentOptions.replace(PaymentUtils.PAYMENT_TYPE.CC.toString(),
                        // "");
                        return 5;
                }
                if (paymentOptions.startsWith(PaymentUtils.PAYMENT_TYPE.WAL.toString())) {
                        payCode = paymentOptions.replace(PaymentUtils.PAYMENT_TYPE.WAL.toString(), "");
                        if (PaymentUtils.PAYU_CC.equals(payCode))
                                return 5;
                        return 5;
                }
                if (paymentOptions.startsWith(PaymentUtils.PAYMENT_TYPE.CAS.toString())) {
                        return 18;
                }
                if (paymentOptions.startsWith(PaymentUtils.PAYMENT_TYPE.COD.toString())) {
                        payCode = paymentOptions.replace(PaymentUtils.PAYMENT_TYPE.COD.toString(), "");
                        if (payCode.equals(IPaymentService.COD)) {
                                return 4;
                        }
                        if (payCode.equals(IPaymentService.COUPON)) {
                                return 17;
                        }
                }

                return 0;
        }

        
}