Subversion Repositories SmartDukaan

Rev

Rev 6146 | Rev 6215 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package in.shop2020.serving.controllers;

import in.shop2020.datalogger.EventType;
import in.shop2020.model.v1.order.RechargeOrder;
import in.shop2020.model.v1.order.RechargeOrderStatus;
import in.shop2020.model.v1.order.RechargeType;
import in.shop2020.model.v1.order.TransactionServiceException;
import in.shop2020.model.v1.user.Affiliate;
import in.shop2020.model.v1.user.TrackLogType;
import in.shop2020.model.v1.user.UserAffiliateException;
import in.shop2020.payments.PaymentException;
import in.shop2020.serving.interceptors.TrackingInterceptor;
import in.shop2020.serving.utils.FormattingUtils;
import in.shop2020.thrift.clients.PaymentClient;
import in.shop2020.thrift.clients.TransactionClient;
import in.shop2020.thrift.clients.UserClient;
import in.shop2020.utils.DataLogger;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

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

public class RechargeResultController extends BaseController {
    private static final long serialVersionUID = 1L;

    private static final String SHOOGLOO_AFF_NAME = "shoogloo";

    private static Logger log = Logger.getLogger(Class.class);
    private FormattingUtils formattingUtils = new FormattingUtils();

    private boolean isShooglooAff  = false;
    private static Map<Long,String> allProviders;
    static {
        try {
                        allProviders = new TransactionClient().getClient().getServiceProviders(RechargeType.DTH);
                        allProviders.putAll(new TransactionClient().getClient().getServiceProviders(RechargeType.MOBILE));
                } catch (TTransportException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (TException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
    }
    long merchantPaymentId;
    RechargeOrder rechargeOrder = null;
    String message = null;

    public RechargeResultController(){
        super();
    }

    public String index() {
        PaymentClient paymentServiceClient = null;
        TransactionClient transactionServiceClient = null;
        UserClient userServiceClient = null;

        try {
            paymentServiceClient = new PaymentClient();
            transactionServiceClient = new TransactionClient();
            userServiceClient = new UserClient();
        } catch (Exception e1) {
            // TODO Nothing to worry
            log.error("Unable to initialize the client for either payment or transaction or user service", e1);
        }

        String returningPayIdString = this.request.getParameter("paymentId");
        if (returningPayIdString == null || returningPayIdString.isEmpty()) {
            this.message = "Payment Failed at payment gateway. Please try again.";
            return "index";
        }
        merchantPaymentId = Long.parseLong(this.request.getParameter("paymentId"));
        long txnId;
        try {
            txnId = paymentServiceClient.getClient().getPayment(merchantPaymentId).getMerchantTxnId();
            rechargeOrder = transactionServiceClient.getClient().getRechargeOrdersForTransaction(txnId);

            this.message = "You have successfully recharged your mobile.";

            if (cookiesMap.containsKey(TrackingInterceptor.AFF_COOKIE)) {
                long affId = Long.parseLong(cookiesMap.get(TrackingInterceptor.AFF_COOKIE).getValue());
                userServiceClient.getClient().addTrackLog(affId, userinfo.getUserId(), TrackLogType.PAYMENT_SUCCESS, "",
                        Long.toString(merchantPaymentId), (new Date()).getTime());
                Affiliate aff = userServiceClient.getClient().getAffiliateById(affId);
                if (aff.getName().equals(SHOOGLOO_AFF_NAME)) {
                    isShooglooAff = true;
                }
            }

        } catch (PaymentException e) {
            log.error("Payment service not responding. Payment id is" + merchantPaymentId, e);
        } catch (TException e) {
            log.error("Thrift service exception. Payment id is" + merchantPaymentId, e);
        } catch (TransactionServiceException e) {
            log.error("Transaction service exception. Payment id is" + merchantPaymentId, e);
        } catch (UserAffiliateException e) {
            log.error("Affiliate service exception. Payment id is" + merchantPaymentId, e);
        }

        return "index";
    }

    public String formatPrice(double price)    {
        return formattingUtils.formatPrice(price);
    }

    public String getMessage(){
        return this.message;
    }

    public boolean getIsShooglooAff() {
        return this.isShooglooAff;
    }

    public long getMerchantPaymentId() {
        return merchantPaymentId;
    }

    public static String formatDate(long timestamp){
        SimpleDateFormat dateformat = new SimpleDateFormat("dd MMMM yyyy");
        return dateformat.format(new Date(timestamp));  
    }


    @Override
    public String getHeaderSnippet() {
        String url = request.getQueryString();
        if (url == null) {
            url = "";
        } else {
            url = "?" + url;
        }
        url = request.getRequestURI() + url;
        return pageLoader.getHeaderHtml(userinfo.isLoggedIn(), userinfo.getEmail(), userinfo.getTotalItems(), url , 0, false);
    }

    public RechargeOrder getRechargeOrder() {
        return rechargeOrder;
    }

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

    public boolean isDTH() {
        return rechargeOrder.getRechargeType().equals(RechargeType.DTH);
    }
    
    public String getProvider() {
        return allProviders.get(rechargeOrder.getOperatorId());
    }
    
    public String[] getOrderStatus(){
        RechargeOrderStatus status = rechargeOrder.getStatus();
        if(status.equals(RechargeOrderStatus.PAYMENT_FAILED)||status.equals(RechargeOrderStatus.PAYMENT_PENDING)){
                DataLogger.logData(EventType.RECHARGE_PAYMENT_FAILED, getSessionId(), userinfo.getUserId(), userinfo.getEmail(),
                                Long.toString(rechargeOrder.getOperatorId()), Long.toString(rechargeOrder.getTotalAmount()), Long.toString(rechargeOrder.getWalletAmount()),
                    rechargeOrder.getRechargeType().toString());
                return new String[]{"red", "PAYMENT FAILED", "Payment failed at the payment gateway. Try to <a href='/recharge'>recharge again</a>"};
        }
        else if(status.equals(RechargeOrderStatus.PAYMENT_SUCCESSFUL)||status.equals(RechargeOrderStatus.RECHARGE_FAILED)){
                DataLogger.logData(EventType.RECHARGE_PAYMENT_SUCCESSFUL, getSessionId(), userinfo.getUserId(), userinfo.getEmail(),
                                Long.toString(rechargeOrder.getOperatorId()), Long.toString(rechargeOrder.getTotalAmount()), Long.toString(rechargeOrder.getWalletAmount()),
                                rechargeOrder.getRechargeType().toString());
                        return new String[]{"red", "RECHARGE FAILED", "Your Payment was successful but unfortunately the recharge failed.<br>" +
                                        "Don't worry your payment is safe with us. The entire Amount has been refunded to your " +
                                        "<a href='/my-wallet'>recharge wallet</a>.<br><br> You " +
                                        "will need to <a href='/login?redirectUrl=/recharge'>login</a> to use your Wallet.<br> If you are registered on" + 
                                        " Saholic.com please use your username and password to Login.<br> In case you are " +
                                        "a first time user, we have sent your login details on the emailId you gave us. " +
                                        "<br>For more information <a href='/static/recharge-faq'>click here</a>"};
        } else {
                DataLogger.logData(EventType.RECHARGE_SUCCESSFUL, getSessionId(), userinfo.getUserId(), userinfo.getEmail(),
                                Long.toString(rechargeOrder.getOperatorId()), Long.toString(rechargeOrder.getTotalAmount()), Long.toString(rechargeOrder.getWalletAmount()),
                                rechargeOrder.getRechargeType().toString());
                return new String[] {"", "SUCCESS", "Congratulations your device is successfully recharged."};
        }
    }
}