Subversion Repositories SmartDukaan

Rev

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

package in.shop2020.recharge.controllers;

import in.shop2020.model.v1.order.FRC;
import in.shop2020.model.v1.order.HotspotStore;
import in.shop2020.model.v1.order.PayMethod;
import in.shop2020.model.v1.order.RechargePlan;
import in.shop2020.model.v1.order.RechargeTransaction;
import in.shop2020.model.v1.order.RechargeType;
import in.shop2020.model.v1.order.TelecomCircle;
import in.shop2020.thrift.clients.TransactionClient;

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

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;

@Results({
    @Result(name="recharge-redirect", type="redirectAction", params = {"actionName" , "home", "errorMsg", "${errorMessage}"}),
    @Result(name="recharge-result", type="redirectAction", params = {"actionName" , "recharge-result", "rechargeId", "${rechargeOrderId}", "paymentAmount", "${paymentAmount}"})
})

public class ConfirmController extends BaseController{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private long rechargeOrderId = 0;
    private String amount = "";
    private long paymentAmount = 0;

        private int payMethod = 0;

        private String number = "";
    private String email = "";
    private String rechargeType = "";
    private String deviceType = "";
    private String mobileOperator = "";
    private String dthOperator = "";
    private String cafNum = "";
    private String simNum = "";
    private String altNum = "";
    private String name = "";
    private String plan = "";
    private String discount = "";
    private String circlecode = "";
    
    private String message = "";
    private String errorMessage = "";
    private String couponCode = "";
    private String couponMessage = "";
    private String hiddenUserId = "";
    private long couponAmount = 0;

    private static final String DISHTV = "DISH TV";
    private static Logger log = Logger.getLogger(Class.class);
    
    public String index() {
        storeId = Long.parseLong((String) request.getSession().getAttribute("STORE_ID"));
        if(!hotspotStores.containsKey(storeId)){
            try{
                HotspotStore hotSpotStore = (new TransactionClient()).getClient().getHotspotStore(storeId, "");
                hotspotStores.put(storeId, hotSpotStore);
            } catch (Exception e) {
                log.error("Unable to get store", e);
            }
        }
        return "index";
    }
    
    public String create() {
        try {
            String loginStatus = (String) request.getSession().getAttribute("LOGGED_IN");
            if(loginStatus == null || !loginStatus.equals("TRUE")){
                return "authfail";
            }
            
            String result = validateFields();
            if(!result.equals("SUCCESS")) {
                errorMessage = result;
                return "recharge-redirect";
            }
            TransactionClient tcl = new TransactionClient();
            boolean discountRemove = true;
            
            Long circleId = 0l;
            if(circlecode != null && !circlecode.equals("")) {
                TransactionClient tcl1 = new TransactionClient();
                TelecomCircle circle = tcl1.getClient().getTelecomCircle(-1, circlecode);
                if(circle != null) {
                    circleId = circle.getId();
                }
            }
            this.paymentAmount = Long.parseLong(amount) - Long.parseLong(discount);
            if(rechargeType.equals("2")) {
                for (FRC frc : tcl.getClient().getFRCs(circleId, Long.parseLong(mobileOperator))) {
                    if(frc.getDenomination() == Long.parseLong(amount)) {
                        if(frc.getMaxDiscount() < Long.parseLong(discount)) {
                            errorMessage = "Maximum discount possible is Rs. " + frc.getMaxDiscount();
                            log.warn("Maximum discount possible is Rs. " + frc.getMaxDiscount());
                            return "recharge-redirect";
                        } else {
                            discountRemove = false;
                        }
                    }
                }
                
                if(discountRemove) {
                    setDiscount("0");
                }
            }
        } catch (Exception e) {
            log.warn("Unable to get frc for operatorId : " + mobileOperator, e);
        }
        return index();
    }
    
    public String createRecharge(){
        try {
            String loginStatus = (String) request.getSession().getAttribute("LOGGED_IN");
            if(loginStatus == null || !loginStatus.equals("TRUE")){
                return "authfail";
            }
            
            String result = validateFields();
            if(!result.equals("SUCCESS")) {
                errorMessage = result;
                return "recharge-redirect";
            }
            
            TransactionClient tc = new TransactionClient();
            List<RechargePlan> plans = tc.getClient().getPlansForOperator(Long.parseLong(mobileOperator));
            List<String> planNameList = new ArrayList<String>();
            if (plans == null || plans.isEmpty()) {
                setPlan("");
            } else {
                for (RechargePlan tempPlan : plans) {
                    planNameList.add(tempPlan.getName());
                }
                if (!planNameList.contains(plan)) {
                    errorMessage = "OperatorId : " + mobileOperator + " and plan : " + plan + " do not match";
                    log.warn("OperatorId : " + mobileOperator + " and plan : " + plan + " do not match");
                    return "recharge-redirect";
                }
            }
            
            RechargeTransaction rechargeOrder = new RechargeTransaction();
            
            rechargeOrder.setAmount(Long.parseLong(amount));
            rechargeOrder.setEmail(email);
            rechargeOrder.setDeviceNum(number.trim());
            rechargeOrder.setPlan(plan);
            rechargeOrder.setAlternateNumber(altNum);
            rechargeOrder.setStoreId(Long.parseLong((String) request.getSession().getAttribute("STORE_ID")));
            rechargeOrder.setIpAddress(remoteAddr(request));
            rechargeOrder.setDeviceType(RechargeType.findByValue((int) Long.parseLong(deviceType)));
            rechargeOrder.setName(name);
            rechargeOrder.setIsFrc(Long.parseLong(rechargeType) == 1 ? false : true);
            rechargeOrder.setCafNum(cafNum);
            rechargeOrder.setSimNum(simNum);
            rechargeOrder.setPayMethod(PayMethod.findByValue(payMethod));
            
            if(deviceType.equals("1")) {
                rechargeOrder.setOperatorId(Long.parseLong(mobileOperator));
            } else if (deviceType.equals("2")) {
                rechargeOrder.setOperatorId(Long.parseLong(dthOperator));
            }
            this.paymentAmount = Long.parseLong(amount) - Long.parseLong(discount);
            rechargeOrder.setPaymentAmount(this.paymentAmount);
            Long circleId = 0l;
            if(circlecode != null && !circlecode.equals("")) {
                TransactionClient tcl1 = new TransactionClient();
                TelecomCircle circle = tcl1.getClient().getTelecomCircle(-1, circlecode);
                if(circle != null) {
                    circleId = circle.getId();
                    if(rechargeOrder.isIsFrc()) {
                        Long storeCircle = (Long.parseLong((String) request.getSession().getAttribute("CIRCLE_ID")));
                        if(storeCircle == circle.getId()) {
                            rechargeOrder.setCircleId(storeCircle);
                        } else {
                            errorMessage = "FRC is not possible because this number is of : "  + circle.getName() + " circle.";
                            log.warn("FRC is not possible because this number is of : "  + circle.getName() + " circle & storeCircle : " + storeCircle);
                            return "recharge-redirect";
                        }
                    } else {
                        rechargeOrder.setCircleId(circle.getId());
                    }
                } else {
                    rechargeOrder.setCircleId(0);
                }
            }
            
            rechargeOrder.setDiscount(0);
            TransactionClient tcl = new TransactionClient();
            if(rechargeOrder.isIsFrc()) {
                for (FRC frc : tcl.getClient().getFRCs(circleId, rechargeOrder.getOperatorId())) {
                    if(frc.getDenomination() == rechargeOrder.getAmount()) {
                        if(frc.getMaxDiscount() < Long.parseLong(discount)) {
                            errorMessage = "MaxDiscount : " + frc.getMaxDiscount() + " is less than discount amount entered";
                            log.warn("You cannot avail discount more than Rs." + frc.getMaxDiscount());
                            return "recharge-redirect";
                        } else {
                            rechargeOrder.setDiscount(Double.parseDouble(discount));
                        }
                    }
                }
            }
            
            TransactionClient tc1 = new TransactionClient();
            rechargeOrder = tc1.getClient().createRechargeTransaction(rechargeOrder);
            setRechargeOrderId(rechargeOrder.getId());
            
        } catch (Exception e) {
            log.error("Unable to create recharge order", e);
            errorMessage = "Oops! There seems to be a problem. Please try after some time";
            return "recharge-redirect";
        }
        return "recharge-result";
    }
    
    public String getOperatorName() {
        String operatorName = null;
        if(deviceType.equals("1")){
            operatorName = HomeController.getMobileProvidersMap().get(Long.parseLong(mobileOperator)); 
        }
        if(deviceType.equals("2")){
            operatorName = HomeController.getDthProvidersMap().get(Long.parseLong(dthOperator));    
        }
        if(operatorName == null){
            operatorName = "N/A";   
        }
        return operatorName;
    }
    
    private String validateFields() {
        if(amount == null || amount == "") {
            log.warn("Amount received is empty or null");
            return "Amount cannot be empty";
        }
        
        if(rechargeType == null || rechargeType == "") {
            log.warn("rechargeType received is empty or null");
            return "Oops! There seems to be a problem. Please try after some time";
        }
        
        if(deviceType == null || rechargeType == "") {
            log.warn("rechargeType received is empty or null");
            return "Oops! There seems to be a problem. Please try after some time";
        }
        
        if (RechargeType.findByValue(Integer.parseInt(this.deviceType)) == RechargeType.DTH) {
            if (Long.parseLong(amount) < 250 || Long.parseLong(amount) > 2000) {
                if(rechargeType.equals("2") && getOperatorName().equals(DISHTV)) {
                    return "DishTv recharge amount should be between Rs.250 and Rs.2000";
                }
                
                if (!(Long.parseLong(amount) >= 200 && Long.parseLong(amount) < 250)) {
                    return "DTH recharge amount should be between Rs.200 and Rs.2000";
                }
            }
          
        } else if (RechargeType.findByValue(Integer.parseInt(this.deviceType)) == RechargeType.MOBILE) {
            if (Long.parseLong(amount) < 1 || Long.parseLong(amount) > 3000) {
                return "Recharge amount should be between Rs.1 and Rs.3000";
            }
            if (number.length() != 10) {
                return "Number should be of 10 digits";
            }
            
        } else if (payMethod != 1 || payMethod != 2){
            log.warn("Missing paymethod or invalid");
            return "Please select paymethod";
        }
        
        if (mobileOperator == null || mobileOperator == "") {
            log.warn("Invalid operator : " + mobileOperator);
            return "Oops! There seems to be a problem. Please try after some time";
        }
        
        if (dthOperator == null || dthOperator == "") {
            log.warn("Invalid operator : " + dthOperator);
            return "Oops! There seems to be a problem. Please try after some time";
        }
        
        return "SUCCESS";
    }
    
    public String getAmount() {
        return amount;
    }
    public void setAmount(String amount) {
        this.amount = amount;
    }

    public void setDthamount(String amount) {
        this.amount = amount;
    }
    
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }
    
    public void setDthnumber(String dthnumber) {
        this.number = dthnumber;
    }

    public int getPayMethod() {
        return payMethod;
    }

    public long getPaymentAmount() {
        return paymentAmount;
    }
    
    public void setPayMethod(int payMethod) {
        this.payMethod = payMethod;
    }
    
    
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }

    public String getRechargeType() {
        return rechargeType;
    }

    public void setRechargeType(String rechargeType) {
        this.rechargeType = rechargeType;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public long getRechargeOrderId() {
        return rechargeOrderId;
    }

    public void setRechargeOrderId(long l) {
        this.rechargeOrderId = l;
    }

    public String getPlan() {
        return plan;
    }

    public void setPlan(String plan) {
        this.plan = plan;
    }

    public String getErrorMessage() {
        return errorMessage;
    }

    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }

    public void setDiscountCode(String discountCode) {
        this.couponCode = discountCode;
    }
    
    public String getCouponCode() {
        return couponCode;
    }

    public void setCouponCode(String couponCode) {
        this.couponCode = couponCode;
    }

    public void setCouponAmount(long couponAmount) {
        this.couponAmount = couponAmount;
    }

    public long getCouponAmount() {
        return couponAmount;
    }

    public void setCouponMessage(String couponMessage) {
        this.couponMessage = couponMessage;
    }

    public String getCouponMessage() {
        return couponMessage;
    }
    
    public void setHash(String hash) {
        this.hiddenUserId = hash;
    }
    
    public String getHiddenUserId() {
        return hiddenUserId;
    }

    public String getDeviceType() {
        return deviceType;
    }

    public void setDeviceType(String deviceType) {
        this.deviceType = deviceType;
    }

    public String getCafNum() {
        return cafNum;
    }

    public void setCafNum(String cafNum) {
        this.cafNum = cafNum;
    }

    public String getSimNum() {
        return simNum;
    }

    public void setSimNum(String simNum) {
        this.simNum = simNum;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAltNum(String altNum) {
        this.altNum = altNum;
    }

    public String getAltNum() {
        return altNum;
    }

    public String getMobileOperator() {
        return mobileOperator;
    }

    public void setMobileOperator(String mobileOperator) {
        this.mobileOperator = mobileOperator;
    }

    public String getDthOperator() {
        return dthOperator;
    }

    public void setDthOperator(String dthOperator) {
        this.dthOperator = dthOperator;
    }

    public void setDiscount(String discount) {
        if(discount == null || discount.isEmpty()) {
            this.discount = "0";
        } else {
            this.discount = discount;
        }
    }

    public String getDiscount() {
        return discount;
    }

    public void setCirclecode(String circlecode) {
        this.circlecode = circlecode;
    }

    public String getCirclecode() {
        return circlecode;
    }
}