Subversion Repositories SmartDukaan

Rev

Rev 7073 | Rev 7096 | Go to most recent revision | 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.RechargePlan;
import in.shop2020.model.v1.order.RechargeTransaction;
import in.shop2020.model.v1.order.RechargeType;
import in.shop2020.thrift.clients.TransactionClient;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
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" , "/", "errorMsg", "${errorMessage}"}),
    @Result(name="recharge-result", type="redirectAction", params = {"actionName" , "recharge-result", "rechargeId", "${rechargeOrderId}"})
})

public class ConfirmController extends BaseController{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private long rechargeOrderId = 0;
    private String amount = "";
    private String number = "";
    private String email = "";
    private String rechargeType = "";
    private String deviceType = "";
    private String mobileOperator = "";
    private String dthOperator = "";
    private String storeId = "";
    private String cafNum = "";
    private String simNum = "";
    private String altNum = "";
    private String name = "";
    private String plan = "";
    private String circleId = "";
    private String discount = "";
    
    private String message = "";
    private String errorMessage = "";
    private String totalAmount = "";
    private String couponCode = "";
    private String couponMessage = "";
    private String hiddenUserId = "";
    private long couponAmount = 0;
    private static final BigInteger key = new BigInteger("0333910847013829827302347601486730417451");
    
    private static final Random random = new Random();
    private static final int LENGTH = 10;
    private static final String HEADER_X_FORWARDED_FOR = "X-FORWARDED-FOR";
    private static Logger log = Logger.getLogger(Class.class);
    
    public String index() {
        return "index";
    }
    
    public String create() {
        return index();
    }
    
    public String createRecharge(){
        try {
            //TODO REmove this
            setStoreId("1");
            setCircleId("5");
            //
            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);
            if(deviceType.equals("1")) {
                rechargeOrder.setOperatorId(Long.parseLong(mobileOperator));
            } else if (deviceType.equals("2")) {
                rechargeOrder.setOperatorId(Long.parseLong(dthOperator));
            }
            
            rechargeOrder.setIsFrc(Long.parseLong(rechargeType) == 1 ? false : true);
            rechargeOrder.setCafNum(cafNum);
            rechargeOrder.setSimNum(simNum);
            
            rechargeOrder.setDiscount(0);
            TransactionClient tcl = new TransactionClient();
            if(rechargeOrder.isIsFrc()) {
                for (FRC frc : tcl.getClient().getFRCs(Long.parseLong(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("MaxDiscount : " + frc.getMaxDiscount() + " is less than discount amount entered");
                            return "recharge-redirect";
                        } else {
                            rechargeOrder.setDiscount(Double.parseDouble(discount));
                            break;
                        }
                    }
                }
            }
            rechargeOrder.setAlternateNumber(altNum);
            
            /**
             *  WHAT TODO ABOUT THIS???
             */
            rechargeOrder.setStoreId(Long.parseLong(storeId));
            
            
            /****************************************************
             *  TODO        *
             * rechargeORder.setCircleId(circle);               *
             *          *
             ****************************************************/
            
            rechargeOrder.setIpAddress(remoteAddr(request));
            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;
    }
    
    public String remoteAddr(HttpServletRequest request) {
        String remoteAddr = "";
        String x;
        x = request.getHeader(HEADER_X_FORWARDED_FOR);
        if (x != null && !x.isEmpty()) {
            remoteAddr = x;
            int idx = remoteAddr.lastIndexOf(',');
            if (idx > -1) {
                remoteAddr = remoteAddr.substring(idx + 1).trim();
            }
        } else {
            remoteAddr = request.getRemoteAddr();
        }
        return remoteAddr;
    }
    
    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(email == null || email == "") {
            log.warn("Email received is empty or null");
            return "Email address cannot be empty";
        }
        
        try {
            InternetAddress emailAdd = new InternetAddress(email);
            emailAdd.validate();
        } catch (AddressException e1) {
            log.warn("Invalid email address : " + email, e1);
            return "ERROR : Invalid email address.";
        }
        
        if (RechargeType.findByValue(Integer.parseInt(this.rechargeType)) == RechargeType.DTH) {
            if (Long.parseLong(totalAmount) < 250 || Long.parseLong(totalAmount) > 2000) {
//                if(operator.equals("1")) {
//                    return "DishTv recharge amount should be between Rs.250 and Rs.2000";
//                }
                
                if (!(Long.parseLong(totalAmount) >= 200 && Long.parseLong(totalAmount) < 250)) {
                    return "DTH recharge amount should be between Rs.200 and Rs.2000";
                }
            }
          
        } else if (RechargeType.findByValue(Integer.parseInt(this.rechargeType)) == RechargeType.MOBILE) {
            if (Long.parseLong(totalAmount) < 10 || Long.parseLong(totalAmount) > 1000) {
                return "Recharge amount should be between Rs.10 and Rs.1000";
            }
            if (number.length() != 10) {
                return "Number should be of 10 digits";
            }
            
        } else {
            log.warn("Invalid rechargeType : " + rechargeType);
            return "Oops! There seems to be a problem. Please try after some time";
        }
        
//        if (operator == null || operator == "") {
//            log.warn("Invalid operator : " + operator);
//            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 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 getTotalAmount() {
        return totalAmount;
    }
    
    public void setTotalAmount(String amount) {
        this.totalAmount  = amount;
        
    }

    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 getStoreId() {
        return storeId;
    }

    public void setStoreId(String storeId) {
        this.storeId = storeId;
    }

    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 setCircleId(String circleId) {
        this.circleId = circleId;
    }

    public String getCircleId() {
        return circleId;
    }
}