Subversion Repositories SmartDukaan

Rev

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

package in.shop2020.serving.controllers;

import in.shop2020.model.v1.order.Order;
import in.shop2020.model.v1.order.OrderStatus;
import in.shop2020.model.v1.user.Cart;
import in.shop2020.model.v1.user.Line;
import in.shop2020.model.v1.user.User;
import in.shop2020.thrift.clients.TransactionServiceClient;
import in.shop2020.thrift.clients.UserContextServiceClient;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import org.apache.log4j.Logger;
import org.apache.struts2.convention.annotation.Action;

/**
 * @author vikas
 *
 */
@SuppressWarnings("serial")
public class HomeController extends BaseController {
    private static Logger log = Logger.getLogger(Class.class);
    private String email;
    private long orderId;
    private User user;
    private long orderCount;
    private long completedOrderCount;
    private long openOrderCount;
    private long failedOrderCount;
    private long userCommunicationCount;
    private String lastLogin;
    private double cartItems;
    private String couponCode = "";
    
    public HomeController(){
        super();
    }

    @Action("/")
    public String index() throws Exception {
        if (email == null) {
            return "input";
        }
        UserContextServiceClient userContextServiceClient = new UserContextServiceClient();
        in.shop2020.model.v1.user.UserContextService.Client userClient = userContextServiceClient.getClient();
        TransactionServiceClient transactionServiceClient = new TransactionServiceClient();
        if (email == null || email.isEmpty()) {
            if (orderId != 0) {
                try {
                    Order order = transactionServiceClient.getClient().getOrder(orderId);
                    user = userClient.getUserById(order.getCustomer_id());
                }
                catch (Exception e) {
                    addActionError("Invalid Input");
                    return "input";
                }
            }
        }
        else {
            try {
                user = userClient.getUserByEmail(email);
            } catch (Exception e) {
                log.warn("Unable to get user service client", e);
                return "input";
            }
        }
        if (user == null || user.getUserId() <= 0) {
            addActionError("Invalid Input");
            return "input";
        }
        
        userCommunicationCount = userClient.getUserCommunicationByUser(user.getUserId()).size();
        
        List<Order> allOrders = transactionServiceClient.getClient().getOrdersForCustomer(user.getUserId(), 0, (new Date()).getTime(), null);
        orderCount = allOrders.size();
        
        List<OrderStatus> failedStatusList = Arrays.asList(new OrderStatus[] {
                OrderStatus.SALES_RET_RESHIPPED,
                OrderStatus.SALES_RET_REFUNDED,
                OrderStatus.DOA_INVALID_REFUNDED,
                OrderStatus.DOA_INVALID_RESHIPPED,
                OrderStatus.DOA_VALID_REFUNDED,
                OrderStatus.DOA_RESHIPPED,
                OrderStatus.REFUNDED,
                OrderStatus.REJECTED,
                OrderStatus.FAILED});
        
        for (Order o : allOrders) {
            if (o.getStatus() == OrderStatus.DELIVERY_SUCCESS) {
                completedOrderCount++;
            }
            else if (failedStatusList.contains(o.getStatus())) {
                failedOrderCount++;
            }
            else {
                openOrderCount++;
            }
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        lastLogin = sdf.format(new Date(userClient.getUserState(user.getUserId()).getLastLogin()));
        try {
            Cart cart = userClient.getCurrentCart(user.getUserId());
            if (cart.getCouponCode() != null) {
                couponCode = cart.getCouponCode();
            }
            for (Line line : cart.getLines()) {
                cartItems += line.getQuantity();
            }
        } catch (Exception e) {
            log.warn("No cart assigned for this user", e);
        }
        return "index";
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEmail() {
        return email;
    }

    public void setOrderId(String orderId) {
        try {
            this.orderId = Long.parseLong(orderId);
        }
        catch (NumberFormatException e) {
            log.error(e);
        }
    }

    public Long getOrderId() {
        return orderId;
    }
    
    public User getUser() {
        return user;
    }
    
    public long getOrderCount() {
        return orderCount;
    }
    
    public long getCompletedOrderCount() {
        return completedOrderCount;
    }
    
    public long getOpenOrderCount() {
        return openOrderCount;
    }
    
    public long getFailedOrderCount() {
        return failedOrderCount;
    }
    
    public double getCartItems() {
        return cartItems;
    }
    
    public String getLastLogin() {
        return lastLogin;
    }

    public String getCouponCode() {
        return couponCode;
    }

    public long getUserCommunicationCount() {
        return userCommunicationCount;
    }
}