Subversion Repositories SmartDukaan

Rev

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

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

import in.shop2020.crm.Activity;
import in.shop2020.crm.ActivityType;
import in.shop2020.crm.Agent;
import in.shop2020.crm.SearchFilter;
import in.shop2020.crm.TicketCategory;
import in.shop2020.model.v1.user.User;
import in.shop2020.model.v1.user.UserContextException;
import in.shop2020.serving.auth.CRMAuthorizingRealm;
import in.shop2020.thrift.clients.CRMClient;
import in.shop2020.thrift.clients.UserClient;
import in.shop2020.util.CRMConstants;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.apache.thrift.TException;

/**
 * @author mandeep
 * 
 */
public class ActivityController extends BaseController {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private List<Activity>    activities;
    private String            activityId;
    private String            description;
    private String            type;
    private String            category;
    private String            customerMobileNumber;
    private String            creatorId;
    private String[]          agentIds;
    private String            startTimestamp;
    private String            endTimestamp;
    private String            customerEmailId;
    private String            customerName;
    private String            userId;

    public String index() {
        try {
            SearchFilter searchFilter = new SearchFilter();

            if (activityId != null && !activityId.isEmpty()) {
                searchFilter.setActivityId(Long.parseLong(activityId));
            } else if (userId != null && !userId.isEmpty()) {
                searchFilter.setCustomerId(Long.parseLong(userId));
            } else if (creatorId != null && !creatorId.isEmpty()) {
                searchFilter.setActivityCreatorIds(Collections
                        .singletonList(Long.parseLong(creatorId)));
                searchFilter.setIsActivityRead(false);
            } else if (agentIds != null && agentIds.length != 0) {
                searchFilter.setActivityCreatorIds(new ArrayList<Long>());
                for (String agentId : agentIds) {
                    searchFilter.getActivityCreatorIds().add(
                            CRMAuthorizingRealm.getAgent(agentId).getId());
                }

                if (type != null && !type.isEmpty()) {
                    searchFilter.setActivityType(ActivityType.valueOf(type));
                }

                if (category != null && !category.isEmpty()) {
                    searchFilter.setTicketCategory(TicketCategory.valueOf(category));
                }

                try {
                    if (startTimestamp != null && !startTimestamp.isEmpty()) {
                        searchFilter.setStartTimestamp(SDF
                                .parse(startTimestamp).getTime());
                    }

                    if (endTimestamp != null && !endTimestamp.isEmpty()) {
                        searchFilter.setEndTimestamp(SDF.parse(endTimestamp)
                                .getTime());
                    }
                } catch (ParseException e) {
                    log.error("Error parsing timestamps", e);
                }
            } else {
                searchFilter.setActivityCreatorIds(Collections
                        .singletonList(CRMAuthorizingRealm.getAgent(
                                currentAgentEmailId).getId()));
            }

            crmServiceClient = new CRMClient().getClient();
            activities = crmServiceClient.getActivities(searchFilter);
        } catch (TException e) {
            log.error("Error while retrieving activities for "
                    + currentAgentEmailId, e);
        } catch (NumberFormatException e) {
            log.error("Error parsing userId: " + userId, e);
        }

        return INDEX;
    }

    public String editNew() {
        return EDIT_NEW;
    }

    public String create() throws Exception {
        Activity activity = new Activity();
        activity.setDescription(description);
        activity.setType(ActivityType.valueOf(type));
        activity.setCreatorId(CRMAuthorizingRealm.getAgent(currentAgentEmailId)
                .getId());

        if (userId != null && !userId.isEmpty()) {
            activity.setCustomerId(Long.parseLong(userId));
        } else {
            User user = null;
            userContextServiceClient = new UserClient().getClient();

            try {
                if (customerName != null && !customerName.isEmpty()) {
                    activity.setCustomerName(customerName);
                }

                if (customerEmailId != null && !customerEmailId.isEmpty()) {
                    activity.setCustomerEmailId(customerEmailId);
                    user = userContextServiceClient
                            .getUserByEmail(customerEmailId);
                }

                if ((user == null || user.getUserId() == -1)
                        && customerMobileNumber != null
                        && !customerMobileNumber.isEmpty()) {
                    activity.setCustomerMobileNumber(customerMobileNumber);
                    user = userContextServiceClient.getUserByMobileNumber(Long
                            .parseLong(customerMobileNumber));
                }
            } catch (UserContextException e) {
                log.error("Could not fetch user for: " + customerEmailId + " "
                        + customerMobileNumber + " " + customerName, e);
            }

            if (user != null && user.getUserId() != -1) {
                activity.setCustomerId(user.getUserId());
            }
        }

        crmServiceClient = new CRMClient().getClient();
        activityId = String.valueOf(crmServiceClient.insertActivity(activity));

        return index();
    }

    public String markAsRead() {
        try {
            crmServiceClient = new CRMClient().getClient();
            crmServiceClient.markAsRead(Long.parseLong(activityId),
                    CRMAuthorizingRealm.getAgent(currentAgentEmailId).getId());
        } catch (NumberFormatException e) {
            log.error("Could not parse activity id from" + activityId, e);
        } catch (TException e) {
            log.error("Could not mark the activityId: " + activityId
                    + " as read", e);
        }

        return index();
    }

    public String getUnreadActivities() {
        try {
            SearchFilter searchFilter = new SearchFilter();
            searchFilter.setIsActivityRead(false);
            searchFilter.setActivityCreatorIds(Collections.singletonList(CRMConstants.ADMIN_AGENT_ID));

            searchFilter.setTicketAssigneeIds(Collections
                    .singletonList(CRMAuthorizingRealm.getAgent(
                            currentAgentEmailId).getId()));

            crmServiceClient = new CRMClient().getClient();
            activities = crmServiceClient.getActivities(searchFilter);
        } catch (TException e) {
            log.error("Could not get agentId for: " + currentAgentEmailId, e);
        }

        return INDEX;
    }

    public ActivityType[] getActivityTypes() {
        return ActivityType.values();
    }

    public Agent getAgent(long agentId) throws TException {
        return CRMAuthorizingRealm.getAgent(agentId);
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getCustomerMobileNumber() {
        return customerMobileNumber;
    }

    public void setCustomerMobileNumber(String customerMobileNumber) {
        this.customerMobileNumber = customerMobileNumber;
    }

    public List<Activity> getActivities() {
        return activities;
    }

    public String getCreatorId() {
        return creatorId;
    }

    public void setCreatorId(String creatorId) {
        this.creatorId = creatorId;
    }

    public String getActivityId() {
        return activityId;
    }

    public void setActivityId(String activityId) {
        this.activityId = activityId;
    }

    public String[] getAgentIds() {
        return agentIds;
    }

    public void setAgentIds(String[] agentIds) {
        this.agentIds = agentIds;
    }

    public String getStartTimestamp() {
        return startTimestamp;
    }

    public void setStartTimestamp(String startTimestamp) {
        this.startTimestamp = startTimestamp;
    }

    public String getEndTimestamp() {
        return endTimestamp;
    }

    public void setEndTimestamp(String endTimestamp) {
        this.endTimestamp = endTimestamp;
    }

    public void setActivities(List<Activity> activities) {
        this.activities = activities;
    }

    public String getCustomerEmailId() {
        return customerEmailId;
    }

    public void setCustomerEmailId(String customerEmailId) {
        this.customerEmailId = customerEmailId;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public User getUser(Long userId) {
        User user = null;

        try {
            userContextServiceClient = new UserClient().getClient();
            user = userContextServiceClient.getUserById(userId);
        } catch (UserContextException e) {
            String errorString = "Could not fetch user for " + userId;
            log.error(errorString, e);
            addActionError(errorString);
        } catch (TException e) {
            String errorString = "Could not create client";
            log.error(errorString, e);
            addActionError(errorString);
        }

        return user;
    }

    public String getCustomerName() {
        return customerName;
    }

    public void setCustomerName(String customerName) {
        this.customerName = customerName;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }
}