Rev 8707 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package in.shop2020.support.controllers;import in.shop2020.model.v1.order.Order;import in.shop2020.model.v1.order.TransactionServiceException;import in.shop2020.model.v1.user.Coupon;import in.shop2020.model.v1.user.CouponCategory;import in.shop2020.model.v1.user.PromotionException;import in.shop2020.support.utils.ReportsUtils;import in.shop2020.thrift.clients.PromotionClient;import in.shop2020.thrift.clients.TransactionClient;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;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 TransactionClient tsc;private in.shop2020.model.v1.order.TransactionService.Client tClient;private final DateFormat formatter = new SimpleDateFormat("EEE, dd-MMM-yyyy hh:mm a");private String discountType;private Long discount;private String couponType;private String coupon;private long type;private String userEmail;private Long userLimit;private Long globalLimit;private Long maxDiscount;private Long minDiscountableVal;private Long startHour;private Long startMinute;private Long endHour;private Long endMinute;private String couponCode;private int isCod;private long couponcategory;private Long orderId;public CouponGvsController(){try {psc = new PromotionClient();pClient = psc.getClient();tsc = new TransactionClient();tClient = tsc.getClient();} catch (Exception e) {logger.error("Error connecting to promotion/transaction 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 be valid till 2 months of creation.Calendar cal = Calendar.getInstance();cal.add(Calendar.DATE, 60);Date endOn = cal.getTime();String arguments = "{";if(!(StringUtils.isEmpty(userEmail) || discount == null || discount <= 0) ) {if(checkConditionsForRefund()){try {arguments = arguments + "\"endOn\":" + String.valueOf(endOn.getTime());if(userEmail.equals("*")) {arguments = arguments + ", \"emails\":\"*\"";} else {String[] emails = userEmail.split(",");arguments = arguments + ", \"emails\":[";int i = 0;for (String email : emails) {if(i == 0) {arguments = arguments + "\"" + email.trim() + "\"";i = 1;} else {arguments = arguments + ",\"" + email.trim() + "\"";}}arguments = arguments + "]";}arguments = arguments + ", \"couponType\":\"" + couponType + "\"";arguments = arguments + ", \"discountType\":\"" + discountType + "\"";arguments = arguments + ", \"discount\":" + discount.toString();if(orderId != null) {arguments = arguments + ", \"orderId\":" + orderId.toString();}if(userLimit == null || userLimit < 1) {arguments = arguments + ", \"usage_limit_for_user\":1";} else {arguments = arguments + ", \"usage_limit_for_user\":" + userLimit.toString();}if(globalLimit == null || globalLimit < 1) {//Do not add this option;} else {arguments = arguments + ", \"globalLimit\":" + globalLimit.toString();}if(maxDiscount == null || maxDiscount < 1) {//Do not add this option;} else {arguments = arguments + ", \"maxDiscount\":" + maxDiscount.toString();}if(minDiscountableVal == null || minDiscountableVal < 1) {//Do not add this option;} else {arguments = arguments + ", \"minDiscountableVal\":" + minDiscountableVal.toString();}if(startHour == null || startHour < 1 || startHour > 23 || startHour > endHour) {//Do not add this option;} else {arguments = arguments + ", \"startHour\":" + startHour.toString();}if(startMinute == null || startMinute < 1 || startMinute < 59) {//Do not add this option;} else {arguments = arguments + ", \"startMinute\":" + startMinute.toString();}if(endHour == null || endHour < 1 || endHour > 23) {//Do not add this option;} else {arguments = arguments + ", \"endHour\":" + endHour.toString();}if(endMinute == null || endMinute < 1 || endMinute < 59) {//Do not add this option;} else {arguments = arguments + ", \"startMinute\":" + startMinute.toString();}if(isCod == 1) {arguments = arguments + ", \"isCod\":True}";} else {arguments = arguments + ", \"isCod\":False}";}if(couponCode == null) {couponCode = "";}String prefix="";switch((int)couponcategory){case 0 : prefix = "CUS";break;case 1 : prefix = "MKT";break;case 2 : prefix = "RFD";break;default : break;}coupon = pClient.createCoupon(type, couponcategory, couponCode, arguments, false, prefix);} catch (Exception e){logger.info("Exception Caught"+e);System.out.println("Exception Caught"+e);return "authsuccess";}}}return "authsuccess";}@Overridepublic void setServletContext(ServletContext context) {this.context= context;}public boolean checkConditionsForRefund(){Order order =null;if(orderId!=null){try {order = tClient.getOrder(orderId);} catch (Exception e1) {logger.error("Error getting order object for orderId: "+orderId, e1);}if(order!=null && discount<=order.getTotal_amount()){return true;}logger.info("Coupon Can't be created due to Coupon Amount Greater Than Order Total Amount");}else if(couponcategory==CouponCategory.CUSTOMER_SATISFACTION.getValue() || couponcategory==CouponCategory.MARKETING.getValue()){return true;}return false;}@Overridepublic void setServletRequest(HttpServletRequest req) {this.request = req;this.session = req.getSession();}//Creapublic 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 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 blocke.printStackTrace();} catch (TException e) {// TODO Auto-generated catch blocke.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.getString("emails"));try {if(obj.getString("discountType").equals("absolute")) {result.add(obj.getString("discount"));} else {result.add(obj.getString("discount") + " %");}} catch (JSONException e){result.add(obj.getString("discount"));}try {result.add(obj.getString("couponType"));} catch (JSONException e){result.add("Physical");}} catch (JSONException e) {result.add("ERROR");result.add("ERROR");result.add("ERROR");}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 blocke.printStackTrace();} catch (TException e) {// TODO Auto-generated catch blocke.printStackTrace();}return "redirect";}public String show(){return destroy();}public String getServletContextPath() {return context.getContextPath();}public String getDiscountType() {return discountType;}public void setDiscountType(String discountType) {this.discountType = discountType;}public Long getDiscount() {return discount;}public void setDiscount(Long discount) {this.discount = discount;}public String getCouponType() {return couponType;}public void setCouponType(String couponType) {this.couponType = couponType;}public Long getUserLimit() {return userLimit;}public void setUserLimit(Long userLimit) {this.userLimit = userLimit;}public Long getGlobalLimit() {return globalLimit;}public void setGlobalLimit(Long globalLimit) {this.globalLimit = globalLimit;}public Long getMaxDiscount() {return maxDiscount;}public void setMaxDiscount(Long maxDiscount) {this.maxDiscount = maxDiscount;}public Long getMinDiscountableVal() {return minDiscountableVal;}public void setMinDiscountableVal(Long minDiscountableVal) {this.minDiscountableVal = minDiscountableVal;}public Long getStartHour() {return startHour;}public void setStartHour(Long startHour) {this.startHour = startHour;}public Long getStartMinute() {return startMinute;}public void setStartMinute(Long startMinute) {this.startMinute = startMinute;}public Long getEndHour() {return endHour;}public void setEndHour(Long endHour) {this.endHour = endHour;}public Long getEndMinute() {return endMinute;}public void setEndMinute(Long endMinute) {this.endMinute = endMinute;}public String getCouponCode() {return couponCode;}public void setCouponCode(String couponCode) {this.couponCode = couponCode;}public int getIsCod() {return isCod;}public void setIsCod(int isCod) {this.isCod = isCod;}public long getCouponcategory() {return couponcategory;}public void setCouponcategory(long couponcategory) {this.couponcategory = couponcategory;}public Long getOrderId() {return orderId;}public void setOrderId(Long orderId) {this.orderId = orderId;}}