Subversion Repositories SmartDukaan

Rev

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

package in.shop2020.support.controllers;

import in.shop2020.model.v1.user.Coupon;
import in.shop2020.model.v1.user.PromotionService.Client;
import in.shop2020.model.v1.user.UserContextService;
import in.shop2020.support.utils.ReportsUtils;
import in.shop2020.thrift.clients.PromotionClient;
import in.shop2020.thrift.clients.UserClient;

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

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@InterceptorRefs({
    @InterceptorRef("defaultStack"),
    @InterceptorRef("login")
})
@Results({
    @Result(name="authfail", type="redirectAction", params = {"actionName" , "reports"})
})
public class PromotionsController implements ServletRequestAware {
        
        private static Logger log = LoggerFactory.getLogger(PromotionsController.class);
        
        private HttpServletRequest request;
        private HttpSession session;
        private Client promotionClient;
        private UserContextService.Client userClient;

        private List<CouponInfo> coupons;
        private List<VoucherInfo> vouchers;

        @Override
        public void setServletRequest(HttpServletRequest req) {
                this.request = req;
                this.session = req.getSession();
        }
        
        public String index() {
        if (!ReportsUtils.canAccessReport((Long) session.getAttribute(ReportsUtils.ROLE), request.getServletPath()))    {
            return "authfail";
        }
                try {
                        PromotionClient promotionServiceClient = new PromotionClient();
                        promotionClient = promotionServiceClient.getClient();
                        
                        UserClient userServiceClient = new UserClient();
                        userClient = userServiceClient.getClient();
                        
                        coupons = new ArrayList<CouponInfo>();
                        CouponInfo couponInfo;
                        
                        long voucherIssued = 0;
                        long voucherRedeemed = 0;
                        long voucherInCart = 0;
                        double voucherAmountRedeemed = 0d;
                        
                        for (Coupon coupon: promotionClient.getActiveCoupons()) {
                                if(!promotionClient.isGiftVoucher(coupon.getCouponCode())) {
                                        try     {
                                                couponInfo = new CouponInfo(coupon.getCouponCode());
                                                couponInfo.setPaymentsCount(promotionClient.getSuccessfulPaymentCountForCoupon(coupon.getCouponCode()));
                                                couponInfo.setCartsCount(userClient.getCartsWithCouponCount(coupon.getCouponCode()));
                                                
                                                String args = coupon.getArguments();
                                                String description;
                                                
                                                if(args == null)        {
                                                        description = promotionClient.getRuleDocString(coupon.getPromotion().getRuleExecutionSrc());
                                                        couponInfo.setDescription("<pre>" + description + "</pre>");
                                                        
                                                } else  {
                                                        JSONObject argsJSON = new JSONObject(args);
                                                        
                                                        description = "Rs." + argsJSON.getString("discount");
                                                        description += " off on " + argsJSON.getString("handset_display_name");
                                                        description += " (Max " + argsJSON.getString("usage_limit") + " uses)";
                                                        
                                                        couponInfo.setDescription("<i>" + description + "</i>");
                                                }
                                                coupons.add(couponInfo);
                                                
                                        } catch (JSONException e) {
                                                log.error("" + e);
                                        }
                                } else if (coupon.getPromotion().getId() == 26){
                                        try {
                                                voucherIssued++;
                                                long redeemedCount = promotionClient.getSuccessfulPaymentCountForCoupon(coupon.getCouponCode());
                                                voucherRedeemed += redeemedCount;
                                                voucherInCart += userClient.getCartsWithCouponCount(coupon.getCouponCode());
                                                JSONObject argsJSON = new JSONObject(coupon.getArguments());
                                                if(redeemedCount > 0){
                                                        voucherAmountRedeemed += argsJSON.getDouble("discount");
                                                }
                                        } catch (Exception e) {
                                                log.error("" + e);
                                        }
                                }
                                VoucherInfo v = new VoucherInfo("Recharge Gift Voucher");
                                v.setTotalAmountRedeemed(voucherAmountRedeemed);
                                v.setTotalVoucherIssued(voucherIssued);
                                v.setTotalVouchersRedeemed(voucherRedeemed);
                                v.setTotalVouchersInCart(voucherInCart);
                                vouchers = new ArrayList<VoucherInfo>();
                                vouchers.add(v);
                        }
                } catch (Exception e) {
                        log.error("" + e);
                }
                return "index";
        }
        
        public List<CouponInfo> getActiveCoupons()      {
                return coupons;
        }

        public List<VoucherInfo> getActiveGiftVouchers()        {
                return vouchers;
        }
        
        public static class CouponInfo {
                private String code;
                private long paymentsCount;
                private long cartsCount;
                private String description;
                
                public CouponInfo(String code)  {
                        this.code = code;
                        paymentsCount = -1;
                        cartsCount = -1;
                        description = null;
                }
                
                public void setPaymentsCount(long paymentsCount)        {
                        this.paymentsCount = paymentsCount;
                }
                
                public void setCartsCount(long cartsCount)      {
                        this.cartsCount = cartsCount;
                }
                
                public void setDescription(String desc) {
                        description = desc;
                }
                
                public String getCode() {
                        return this.code;
                }
                
                public long getPaymentsCount()  {
                        return this.paymentsCount;
                }
                
                public long getCartsCount()     {
                        return this.cartsCount;
                }

                public String getDescription()  {
                        return description;
                }
                
                public String toString()        {
                        return code + " " + paymentsCount + " " + cartsCount + " " + description;
                }
        }
        
        public static class VoucherInfo {
                private String promotionName;
                private long totalVoucherIssued;
                private long totalVouchersInCart;
                private long totalVouchersRedeemed;
                private double totalAmountRedeemed;
                
                public VoucherInfo(String promotionName){
                        this.promotionName = promotionName;
                        this.totalVoucherIssued = 0;
                        this.totalAmountRedeemed = 0d;
                        this.totalVouchersInCart = 0;
                }

                public String getPromotionName() {
                        return promotionName;
                }
                public void setPromotionName(String promotionName) {
                        this.promotionName = promotionName;
                }
                public long getTotalVoucherIssued() {
                        return totalVoucherIssued;
                }
                public void setTotalVoucherIssued(long totalVoucherIssued) {
                        this.totalVoucherIssued = totalVoucherIssued;
                }
                public long getTotalVouchersInCart() {
                        return totalVouchersInCart;
                }
                public void setTotalVouchersInCart(long totalVouchersInCart) {
                        this.totalVouchersInCart = totalVouchersInCart;
                }
                public long getTotalVouchersRedeemed() {
                        return totalVouchersRedeemed;
                }
                public void setTotalVouchersRedeemed(long totalVouchersRedeemed) {
                        this.totalVouchersRedeemed = totalVouchersRedeemed;
                }
                public double getTotalAmountRedeemed() {
                        return totalAmountRedeemed;
                }
                public void setTotalAmountRedeemed(double totalAmountRedeemed) {
                        this.totalAmountRedeemed = totalAmountRedeemed;
                }
                
                
        }
}