Subversion Repositories SmartDukaan

Rev

Rev 3721 | Rev 3967 | 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.Order;
import in.shop2020.model.v1.order.TransactionServiceException;
import in.shop2020.model.v1.user.Cart;
import in.shop2020.model.v1.user.ShoppingCartException;
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.serving.utils.Utils;
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.util.Date;
import java.util.List;

import org.apache.log4j.Logger;
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;
import org.apache.thrift.TException;


@InterceptorRefs({
    @InterceptorRef("myDefault"),
    @InterceptorRef("login")
})

public class PaySuccessController extends BaseController{
        private static final long serialVersionUID = 1L;
        
        private static final String ITEM = "ITEM";
        private static final String ITEMS = "ITEMS";
        
        private static Logger log = Logger.getLogger(Class.class);
        private FormattingUtils formattingUtils = new FormattingUtils();
    
        
        long merchantPaymentId;
        List<Order> orders = null;
        String message = null;
        
        public PaySuccessController(){
                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);
                }
                
        
                merchantPaymentId = Long.parseLong(this.request.getParameter("paymentId"));
                
                long txnId;
                try {
                        txnId = paymentServiceClient.getClient().getPayment(merchantPaymentId).getMerchantTxnId();
                        orders = transactionServiceClient.getClient().getOrdersForTransaction(txnId, userinfo.getUserId());
                        Cart cart = userServiceClient.getClient().getCart(userinfo.getCartId());
                        if(cart != null){
                                userinfo.setTotalItems(cart.getLinesSize());
                                userinfo.setTotalAmount(cart.getTotalPrice());
                        }else{
                                userinfo.setTotalItems(0);
                                userinfo.setTotalAmount(0);
                        }
                        
                        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());
                }
                        
                        String suffix = ITEM;
                        if(orders.size() > 1)
                            suffix = ITEMS;
                        
                        if(orders.get(0).isCod())
                            this.message = "You have successfully ordered <span class=\"orange\">" + orders.size() + " " + suffix + ".</span>";
                        else
                                this.message = "You have successfully ordered <span class=\"orange\">" + orders.size() + " " + suffix + ".</span>" + 
                                " <br/> Congratulations! Your order qualifies for the 100% Cashback Offer. <br/>" +
                                "We will get in touch with you if you are the lucky winner. <br/>" +
                                "Meanwhile you can check out all our winners on our <a href='http://www.facebook.com/mysaholic'>Facebook Page</a> .";
                } 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 (ShoppingCartException e) {
                        log.error("Shopping cart service exception. Payment id is" + merchantPaymentId, e);
                } catch (UserAffiliateException e) {
                    log.error("Affiliate service exception. Payment id is" + merchantPaymentId, e);
        }
                
                DataLogger.logData(EventType.PAYMENT_SUCCESS, getSessionId(), userinfo.getUserId(), 
                        userinfo.getEmail(), Long.toString(merchantPaymentId), Utils.getItemIdStringFromOrders(orders));
                
                return "index";
        }
        
        public String formatPrice(double price)    {
            return formattingUtils.formatPrice(price);
        }
        
        public List<Order> getOrders(){
                return this.orders;
        }
        
        public String getMessage(){
                return this.message;
        }       
}