Subversion Repositories SmartDukaan

Rev

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

package in.shop2020.support.controllers;

import in.shop2020.model.v1.order.RechargeOrderStatus;
import in.shop2020.model.v1.order.RechargePlan;
import in.shop2020.model.v1.order.RechargeStatistics;
import in.shop2020.model.v1.order.RechargeType;
import in.shop2020.support.utils.ReportsUtils;
import in.shop2020.thrift.clients.TransactionClient;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

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

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.slf4j.Logger;
import org.slf4j.LoggerFactory;


@InterceptorRefs({
    @InterceptorRef("defaultStack"),
    @InterceptorRef("login")
})

@Results({
    @Result(name="authfail", type="redirectAction", params = {"actionName" , "reports"})
})
public class RechargeOrdersController implements ServletRequestAware, ServletContextAware {

    private static Logger logger = LoggerFactory.getLogger(RechargeOrdersController.class);
    
    private HttpServletRequest request;
    private HttpSession session;
    private ServletContext context;
    
        private RechargeStatistics stats;

    private static Map<Long, String> providers;
    static Map<String, String> planMap = new HashMap<String, String>();
    
    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");
        
    public RechargeOrdersController(){
            try {
            tsc = new TransactionClient();
            tClient = tsc.getClient();
        } catch (Exception e) {
            logger.error("Error connecting to one of the user, order or payment service", e);
        }
        }
                
    static{
        TransactionClient tc;
        try {
            tc = new TransactionClient();
            providers = tc.getClient().getServiceProviders(RechargeType.MOBILE, false);
            for (Long operatorId : providers.keySet()) {
                List<RechargePlan> plans = tc.getClient().getPlansForOperator(operatorId);
                if (!plans.isEmpty()) {
                        for(RechargePlan plan: plans){
                                planMap.put(plan.getName(), plan.getDisplayName());
                        }
                }
            }
            for(Entry<Long, String> providerEntry: tc.getClient().getServiceProviders(RechargeType.DTH, false).entrySet()){
                providers.put(providerEntry.getKey(), providerEntry.getValue());
            }
            
        } catch (Exception e) {
            logger.error("Cannot get providers", e);
        }
    }
    
        public String index() {
        if(!ReportsUtils.canAccessReport((Long)session.getAttribute(ReportsUtils.ROLE), request.getServletPath())) {
            return "authfail";
        }
        try {
            stats = tClient.getRechargeStatistics();
                } catch (Exception e){
                    logger.error("Error while getting order statistics", e);
                }
        return "authsuccess";
        
        }
        
        public RechargeStatistics getStats() {
                return stats;
    }

    public String getOperator(long operatorId) {
        return providers.get(operatorId);
    }

    public String getPlanString(String plan) {
        return planMap.get(plan);
    }
    
    public String getStatusDescription(long status) {
        return RechargeOrderStatus.findByValue((int)status).toString();
    }
    
    public String getDateTime(long milliseconds) {
        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(milliseconds);
        return formatter.format(cal.getTime());
    }

    @Override
    public void setServletRequest(HttpServletRequest req) {
        this.request = req;
        this.session = req.getSession();        
    }
    
    @Override
    public void setServletContext(ServletContext context) {
        this.context = context;
    }

    public String getServletContextPath() {
        return context.getContextPath();
    }
    
    public static Map<Long, String> getProviderMap() {
        return providers;
    }
}