Subversion Repositories SmartDukaan

Rev

Rev 6569 | Rev 6679 | Go to most recent revision | 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.PromotionException;
import in.shop2020.support.utils.ReportsUtils;
import in.shop2020.thrift.clients.PromotionClient;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

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

import org.apache.commons.lang.StringUtils;
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.apache.struts2.util.ServletContextAware;
import org.apache.thrift.TException;
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"}),
        @Result(name="redirect", type="redirectAction", location = "coupon-gvs",  params={"statusCode", "301"})
})
public class CouponGvsController implements ServletRequestAware, ServletContextAware {

    private static Logger logger = LoggerFactory.getLogger(CouponGvsController.class);
    
    private HttpServletRequest request;
    private HttpServletResponse response;
    private HttpSession session;
    private ServletContext context;
    
    private PromotionClient psc;
    private in.shop2020.model.v1.user.PromotionService.Client pClient;
    
    private final DateFormat formatter = new SimpleDateFormat("EEE, dd-MMM-yyyy hh:mm a");
    



        private String coupon;
    private long type;
    private Long amount;
    private String userEmail;
        
    public CouponGvsController(){
            try {
            psc = new PromotionClient();
            pClient = psc.getClient();
        } catch (Exception e) {
            logger.error("Error connecting to promotion service", e);
        }
        }
                
        
        public String index() {
        if(!ReportsUtils.canAccessReport((Long)session.getAttribute(ReportsUtils.ROLE), request.getServletPath())) {
            return "authfail";
        }
        return "authsuccess";
        
        }
        
        public String create(){
                if(!ReportsUtils.canAccessReport((Long)session.getAttribute(ReportsUtils.ROLE), request.getServletPath())) {
                        return "authfail";
                }
                //Coupon would we valid till 2 months of cretaion.
                Calendar cal = Calendar.getInstance();
                cal.add(Calendar.DATE, 60);
                Date endOn = cal.getTime();
                if(!(StringUtils.isEmpty(userEmail) || amount == null) ) {
                        try {
                                coupon = pClient.createCoupon(type, endOn.getTime(), userEmail, amount, false, 1, null);
                        } catch (Exception e){
                                return "authsuccess";
                        }
                }
                return "authsuccess";   
        }


        @Override
        public void setServletContext(ServletContext context) {
                this.context= context;
        }


        @Override
        public void setServletRequest(HttpServletRequest req) {
               this.request = req;
                this.session = req.getSession();
        }
        
        //Crea
        public String getCoupon() {
                return coupon;
        }
        
        
        public void setCoupon(String coupon) {
                this.coupon = coupon;
        }
        
        
        public long getType() {
                return type;
        }
        
        
        public void setType(long type) {
                this.type = type;
        }
        
        
        public Long getAmount() {
                return amount;
        }
        
        
        public void setAmount(Long amount) {
                this.amount = amount;
        }
        
        
        public String getUserEmail() {
                return userEmail;
        }
        
        public void setUserEmail(String userEmail) {
                this.userEmail = userEmail;
        }
        
        public List<Coupon> getCoupons() {
                try {
                        return pClient.getActiveCodes(27l);
                } catch (PromotionException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (TException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                return null;
        }
        
        public List<String> getArguments(Coupon coupon){
                List<String> result = new ArrayList<String>();
                try {
                        JSONObject obj = new JSONObject(coupon.getArguments());
                        result.add(obj.getJSONArray("emails").getString(0));
                        result.add(obj.getString("discount"));
                } catch (JSONException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                return result;
        }
                
        public void setId(String id) {
                this.coupon = id;
        }
        
        public String destroy(){
                if(!ReportsUtils.canAccessReport((Long)session.getAttribute(ReportsUtils.ROLE), request.getServletPath().split("/")[1])) {
                        return "athfail";
                }
                try {
                        pClient.deleteCoupon(coupon);
                } catch (PromotionException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (TException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                return "redirect"; 
        }
        public String show(){
                return destroy(); 
        }
        

    public String getServletContextPath() {
        return context.getContextPath();
    }
}