Subversion Repositories SmartDukaan

Rev

Rev 5340 | Rev 7798 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/**
 * 
 */
package in.shop2020.serving.controllers;

import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;

import in.shop2020.datalogger.EventType;
import in.shop2020.logistics.LogisticsInfo;
import in.shop2020.logistics.LogisticsService.Client;
import in.shop2020.logistics.DeliveryType;
import in.shop2020.logistics.LogisticsServiceException;
import in.shop2020.thrift.clients.LogisticsClient;
import in.shop2020.utils.DataLogger;

import org.apache.log4j.Logger;
import org.apache.struts2.rest.DefaultHttpHeaders;
import org.apache.struts2.rest.HttpHeaders;
import org.apache.thrift.TException;

import com.google.gson.Gson;

/**
 * @author rajveer
 *
 */
public class EstimateController extends BaseController {
        
        private static final long serialVersionUID = 8023801600023970837L;

        private static Logger log = Logger.getLogger(Class.class);      
        private String id;
        private long itemId;
        private String pincode;
        private long days = -1;
        private boolean isCODAvailable;
        private boolean isOTGAvailable;
        private Map<String, String> response = new HashMap<String, String>();
        
        public EstimateController() {
                super();
        }
    
    // GET /logout
    public HttpHeaders show(){
        LogisticsClient logisticsServiceClient = null;
        try {
                        logisticsServiceClient = new LogisticsClient();
                        Client logisticsClient = logisticsServiceClient.getClient();
                        LogisticsInfo logistincInfo = logisticsClient.getLogisticsEstimation(itemId, pincode, DeliveryType.PREPAID);
                        days = logistincInfo.getDeliveryTime();
                        isCODAvailable = logistincInfo.isCodAllowed();
                        isOTGAvailable = logistincInfo.isOtgAvailable();
        } catch (LogisticsServiceException e)   {
                days = -1;
                isCODAvailable = false;
                log.error("Unable to get estimate/COD availability for " + itemId, e);
                
                } catch(TException e)   {
                        
                } catch (Exception e)   {
                
                }
                response.put("delivery_estimate", Long.toString(days));
                response.put("is_cod_available_for_location", Boolean.toString(isCODAvailable));
                response.put("on_time_guarantee", Boolean.toString(isOTGAvailable));
                
                try{
                        if(pincode.length() == 6 && !pincode.equals("110001")){
                                String requestOrigin = request.getHeader("referer").contains("cart")?"Cart":"Product";
                                DataLogger.logData(EventType.DELIVERY_ESTIMATE, getSessionId(), userinfo.getUserId(), userinfo.getEmail(),
                                                pincode, (new Long(days)).toString(), (new Long(itemId)).toString(), (new Boolean(isCODAvailable)).toString(),
                                                requestOrigin);
                        }
                }catch(Exception e){
                        log.warn(e.getMessage()+"pincode : "+ pincode + " Actual referer : " + request.getHeader("referer") + e.getStackTrace());
                }
        return new DefaultHttpHeaders("index");
    }
    
    /**
     * 
     * @param id
     */
    public void setId(String id) {
        this.id = id;
        StringTokenizer tokenizer = new StringTokenizer(this.id, "_");
        this.pincode = tokenizer.nextToken();
        this.itemId = Long.parseLong(tokenizer.nextToken());
    }

    public String getResponseJSONString() {
        Gson gson = new Gson();
        return gson.toJson(response);
    }
}