Subversion Repositories SmartDukaan

Rev

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

package in.shop2020.serving.controllers;

import java.util.Map;

import in.shop2020.model.v1.order.RechargeOrder;
import in.shop2020.model.v1.order.RechargeType;
import in.shop2020.model.v1.user.Address;
import in.shop2020.thrift.clients.PromotionClient;
import in.shop2020.thrift.clients.TransactionClient;
import in.shop2020.thrift.clients.UserClient;

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" , "recharge", "error", "${errorMsg}"})
})

public class RechargePayOptionsController extends BaseController {
    
    //private static final ResourceBundle resource = ResourceBundle.getBundle(ProceedToPayController.class.getName());
    //private static final boolean SHOW_EBS_TEST_GATEWAY = Boolean.parseBoolean(resource.getString("show_ebs_test_gateway"));
    private RechargeOrder rechargeOrder = null;
    private String rechargeOrderId = "";
    private String errorMsg = "";
    public final static String ADDRESS = "address";
    public final static String PHONE = "phone";
    public final static String NOTHING = "nothing";
    private Long amount = null;
    private String phone = "";
    
    private static final long serialVersionUID = 2079308723099307749L;

    private static Logger log = Logger.getLogger(Class.class);
    
    public String index() {
        try {
            TransactionClient tcl = new TransactionClient();
            rechargeOrder = tcl.getClient().getRechargeOrder(Long.parseLong(rechargeOrderId));
            setAmount(rechargeOrder.getTotalAmount() - rechargeOrder.getWalletAmount() - rechargeOrder.getCouponAmount());
            
            if (rechargeOrder.getCouponAmount() > 0) {
                PromotionClient pc = new PromotionClient();
                Map<Long, String> couponResult = null;
                couponResult = pc.getClient().applyRechargeCoupon(rechargeOrder.getCouponCode(), rechargeOrder.getTotalAmount(), rechargeOrder.getUserId());
                if(couponResult != null) {
                    if(!couponResult.containsKey(rechargeOrder.getCouponAmount())) {
                        errorMsg = "The coupon you applied is not valid anymore";
                        return "recharge-redirect";
                    }
                } else {
                    errorMsg = "The coupon you applied is not valid anymore";
                    return "recharge-redirect";
                }
            }
        } catch (Exception e) {
            log.error("Unable to get recharge Order for id : " + rechargeOrderId);
            errorMsg = "Some error occured. Please try again. Sorry for the inconvenience.";
            return "recharge-redirect";
        }
        return "index";
    }
    
    private void setAmount(long amount) {
        this.amount = amount;
    }
    
    public String getAmount() {
        return amount.toString();
    }

    public String create() {
        return index();
    }
    
    /*public boolean shouldShowEbsTestGateway() {
        //return SHOW_EBS_TEST_GATEWAY;
        return true;
    }*/
    
    public String fieldsToShow() {
        Address address = null;
        UserClient ucl;
        long addressId = 0;
        long amount = rechargeOrder.getTotalAmount() - rechargeOrder.getWalletAmount() - rechargeOrder.getCouponAmount();
        if (rechargeOrder.getRechargeType().equals(RechargeType.DTH)) {
            try {
                ucl = new UserClient();
                addressId = ucl.getClient().getDefaultAddressId(rechargeOrder.getUserId());
                if (addressId != 0) {
                    address = ucl.getClient().getAddressById(addressId);
                }
            } catch (Exception e) {
                log.error("Unable to connect to user service", e);
                //We don't know if we need customer's address or phone. Let us ask.
                if (amount > 1000)
                    return ADDRESS;
                else
                    return PHONE;
            }

            if (amount > 1000) {
                if (address == null) {
                    return ADDRESS;
                } else {
                    return NOTHING;
                }
            } else {
                if (address == null || address.getPhone() == null || address.getPhone().isEmpty()) {
                    return PHONE;
                } else {
                    setPhone(address.getPhone());//We have his phone number.
                    return PHONE;
                }
            }
            
            
        //For Mobile Recharges
        } else {
            setPhone(rechargeOrder.getDeviceNumber());//We have his phone number.
            return PHONE;
        }
    }

    public void setRechargeOrder(RechargeOrder rechargeOrder) {
        this.rechargeOrder = rechargeOrder;
    }

    public RechargeOrder getRechargeOrder() {
        return rechargeOrder;
    }

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

    public String getRechargeOrderId() {
        return rechargeOrderId;
    }

    public String getErrorMsg() {
        return errorMsg;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
}