Subversion Repositories SmartDukaan

Rev

Rev 3339 | Blame | 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.Ticket;
import in.shop2020.crm.TicketPriority;
import in.shop2020.crm.TicketStatus;
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.HelperClient;
import in.shop2020.thrift.clients.UserClient;
import in.shop2020.util.CRMConstants;
import in.shop2020.utils.HelperService.Client;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.apache.shiro.SecurityUtils;
import org.apache.thrift.TException;

/**
 * Action class for activity pages in CRM.
 * 
 * @author mandeep
 */
public class UserActivityController extends BaseController {
    /**
     * 
     */
    private static final long   serialVersionUID = 1L;

    private Map<Long, Activity> activities       = new LinkedHashMap<Long, Activity>();

    private String              userId;
    private String              description;
    private User                user;
    private String              type;
    private String              subject;
    private String              body;
    private String              userEmailId;

    public String index() throws TException, UserContextException {
        SearchFilter searchFilter = new SearchFilter();
        searchFilter.setCustomerId(Long.parseLong(userId));
        crmServiceClient         = new CRMClient().getClient();

        List<Activity> activityList = crmServiceClient.getActivities(searchFilter);
        if (activityList != null) {
            for (Activity activity : activityList) {
                activities.put(activity.getId(), activity);
            }
        }

        user = userContextServiceClient.getUserById(Long.parseLong(userId));

        return INDEX;
    }

    public String editNew() {
        try {
            if (userId != null && !userId.isEmpty()) {
                userContextServiceClient = new UserClient().getClient();
                user = userContextServiceClient.getUserById(Long.parseLong(userId));
            }
            subject = "";
        } catch (UserContextException e) {
            String errorMessage = "Could not fetch user for " + userId;
            addActionError(errorMessage);
            log.error(errorMessage, e);
            return EXCEPTION;
        } catch (TException e) {
            String errorMessage = "Could not fetch user for " + userId;
            addActionError(errorMessage);
            log.error(errorMessage, e);
            return EXCEPTION;
        }

        return EDIT_NEW;
    }

    public Map<Long, Activity> getActivities() {
        return activities;
    }

    public TicketStatus[] getTicketStatuses() {
        return TicketStatus.values();
    }

    public TicketPriority[] getTicketPriorities() {
        return TicketPriority.values();
    }

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

    public User getUser() {
        return user;
    }

    public Ticket getTicket(long activityId) throws TException {
        SearchFilter searchFilter = new SearchFilter();
        searchFilter.setActivityId(activityId);
        crmServiceClient         = new CRMClient().getClient();

        Ticket ticket = null;
        Activity activity = null;
        List<Activity> activities = crmServiceClient.getActivities(searchFilter);
        if (activities != null && !activities.isEmpty()) {
            activity = activities.get(0);
        }

        if (activity != null && activity.isSetTicketId()) {
            searchFilter.setTicketId(activity.getTicketId());
            List<Ticket> tickets = crmServiceClient.getTickets(searchFilter);
            if (tickets != null && !tickets.isEmpty()) {
                ticket = tickets.get(0);
            }
        }

        return ticket;
    }

    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));
        }

        if (ActivityType.SEND_EMAIL_TO_CUSTOMER.equals(activity.getType())) {
            log.info("Sending mail");
            Client helperClient = new HelperClient().getClient();
            activity.setUserEmailId(helperClient.saveUserEmailForSending(
                    userEmailId, CRMConstants.CRM_EMAIL_SENDOR, subject,
                    body, null, CRMConstants.CRM_EMAIL_TYPE));

            // We change activityType to OTHER when pop up box for email
            // closes
            activity.setDescription("Subject: " + subject + "\n\n" + "Body: " + body);
        }

        crmServiceClient         = new CRMClient().getClient();
        crmServiceClient.insertActivity(activity);

        return index();
    }

    public boolean isAssigneeEditable() {
        return SecurityUtils.getSubject().hasRole("TeamLead");
    }

    public List<Agent> getAllAgents() throws TException {
        return CRMAuthorizingRealm.getAgents();
    }

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

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

    public String getUserId() {
        return userId;
    }

    public String getType() {
        return type;
    }

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

    public String getDescription() {
        return description;
    }

    public void setActivities(Map<Long, Activity> activities) {
        this.activities = activities;
    }

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

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    public String getUserEmailId() {
        return userEmailId;
    }

    public void setUserEmailId(String userEmailId) {
        this.userEmailId = userEmailId;
    }
}