Subversion Repositories SmartDukaan

Rev

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

package in.shop2020.support.controllers;



import in.shop2020.model.v1.order.Attribute;
import in.shop2020.model.v1.order.Order;
import in.shop2020.model.v1.order.TransactionService.Client;
import in.shop2020.model.v1.order.TransactionServiceException;
import in.shop2020.thrift.clients.TransactionClient;

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

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

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware;
import org.apache.thrift.TException;
import org.apache.thrift.transport.TTransportException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class PickupStoreController implements ServletResponseAware, ServletRequestAware, ServletContextAware {

    private static Logger logger = LoggerFactory.getLogger(PickupStoreController.class);
    
    private HttpServletRequest request;
    private HttpServletResponse response;
    private ServletContext context;
    private String storeIdString;
    private long storeId;
    private String id;
    private String error = "";
    private Client client;
    
    public PickupStoreController() throws TTransportException{
        client = (new TransactionClient()).getClient();
    }
    
    @Override
    public void setServletRequest(HttpServletRequest req) {
        this.request = req;
    }

    public HttpServletRequest getServletRequest() {
        return request;
    }

    @Override
    public void setServletResponse(HttpServletResponse res) {
        this.response = res;
    }

    public HttpServletResponse getServletResponse() {
        return response;
    }

    @Override
    public void setServletContext(ServletContext context) {
        this.context = context;
    }

    public String getServletContextPath() {
        return context.getContextPath();
    }

    public String index(){
        storeIdString = (String) request.getSession().getAttribute("STORE_ID");
        if(storeIdString == null){
                storeIdString = request.getParameter("storeid");
                if(storeIdString == null){
                        return "authfail";
                }else{
                        request.getSession().setAttribute("STORE_ID", storeIdString);
                }
        }
        storeId = Long.parseLong(storeIdString);
        return "index";
    }

    public String show(){
        storeIdString = (String) request.getSession().getAttribute("STORE_ID");
        if(storeIdString == null){
                storeIdString = request.getParameter("storeid");
                if(storeIdString == null){
                        return "authfail";
                }else{
                        request.getSession().setAttribute("STORE_ID", storeIdString);
                }
        }
        storeId = Long.parseLong(storeIdString);
        return "show";
    }
    
    // Handles the POST request (Form Submission)
    public String create() {
        storeIdString = (String) request.getSession().getAttribute("STORE_ID");
        if(storeIdString == null){
                return "authfail";
        }
        storeId = Long.parseLong(storeIdString);
        String orderIdString = request.getParameter("orderid");
        String action = request.getParameter("action");
                try {
                        Client client = (new TransactionClient()).getClient();
                        if(action.equals("markreceived")){
                                long orderId = Long.parseLong(orderIdString);
                                client.markOrderAsReceivedAtStore(orderId, Calendar.getInstance().getTimeInMillis());   
                        }else if(action.equals("markdelivered")){
                                long orderId = Long.parseLong(orderIdString);
                        String receiver = request.getParameter("receiver");
                                String secretCode = request.getParameter("secretcode");
                                Order order = client.getOrder(orderId);
                                List<Attribute> attributes = client.getAllAttributesForOrderId(orderId);
                                for(Attribute attribute: attributes){
                                        if(attribute.getName().equals("SECRET_CODE")){
                                                if(!attribute.getValue().equalsIgnoreCase(secretCode)){
                                                        error = "Secret code does not match";
                                                }
                                        }
                                }
                                List<Attribute> newAttributes = new ArrayList<Attribute>();
                                if(order.isCod()){
                                        double amount = Double.parseDouble(request.getParameter("amount"));
                                        if(order.getTotal_amount() != amount){
                                                error = "<br>Amount does not match";
                                        }
                                }
                                if(!error.equalsIgnoreCase("")){
                                        setId("deliver");
                                        return show();
                                }else{
                                        if(order.isCod()){
                                                String paymentType =  request.getParameter("paymenttype");
                                                newAttributes.add(new Attribute("PAYMENT_MODE", paymentType));
                                                client.setOrderAttributes(orderId, newAttributes);
                                        }
                                }
                                client.markOrderAsDelivered(Long.parseLong(orderIdString), Calendar.getInstance().getTimeInMillis(), receiver);
                        }else if(action.equals("markreturned")){
                                String orderIdsString = request.getParameter("orderIds");
                                long providerId = Long.parseLong(request.getParameter("providerID"));
                                List<Long> orderIds = new ArrayList<Long>();
                                for(String orderIdString1: orderIdsString.split(":")){
                                        orderIds.add(Long.parseLong(orderIdString1));
                                }
                                client.markOrdersAsReturnedFromStore(providerId, orderIds);
                        }
                        
                        return "index";
                } catch (TTransportException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (NumberFormatException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (TransactionServiceException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (TException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        return "index";
    }
    

    public List<Order> getReceivePendingOrders() throws TException{
        Client client = (new TransactionClient()).getClient();
        return client.getReceivePendingOrders(storeId);
    }
    
    public List<Order> getReceivedAtStoreOrders() throws TException{
        Client client = (new TransactionClient()).getClient();
        return client.getReceivedAtStoreOrders(storeId);
    }

    public String getSecretCode(long orderId) throws TException{
        List<Attribute> attributes = client.getAllAttributesForOrderId(orderId);
        for(Attribute attribute: attributes){
                if(attribute.getName() == "SECRET_CODE"){
                        return attribute.getValue();
                }
        }
        return "";
    }
    
        public void setId(String id) {
                this.id = id;
        }

        public String getId() {
                return id;
        }

        public void setError(String error) {
                this.error = error;
        }

        public String getError() {
                return error;
        }
        
        public long getStoreId(){
                return storeId;
        }
        
}