Subversion Repositories SmartDukaan

Rev

Rev 3339 | Rev 3397 | 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.Ticket;
import in.shop2020.crm.TicketCategory;
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.UserClient;

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

import org.apache.thrift.TException;

/**
 * @author mandeep
 * 
 */
public class TicketsController extends BaseController {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    List<Ticket>              tickets          = new ArrayList<Ticket>();
    private String            userEmailId;
    private String            description;
    private String            assigneeEmailId;
    private String            priority;
    private String            category;
    private String            orderId;

    public String create() {
        try {
            long creatorId = CRMAuthorizingRealm.getAgent(currentAgentEmailId).getId();
            Ticket ticket = new Ticket();
            ticket.setDescription(description);
            ticket.setCreatorId(creatorId);
            ticket.setStatus(TicketStatus.OPEN);
            ticket.setPriority(TicketPriority.valueOf(priority));
            ticket.setCategory(TicketCategory.valueOf(category));

            Activity activity = new Activity();
            // At creation of ticket activity's description is same as that of
            // ticket
            activity.setDescription("Creating Ticket");
            activity.setType(ActivityType.OTHER);
            activity.setTicketPriority(TicketPriority.valueOf(priority));
            activity.setTicketStatus(TicketStatus.OPEN);
            activity.setCreatorId(creatorId);
            activity.setTicketCategory(TicketCategory.valueOf(category));
            activity.setTicketDescription(description);

            if (orderId != null && !orderId.isEmpty()) {
                ticket.setOrderId(Long.parseLong(orderId));
            }

            if (userEmailId != null && !userEmailId.isEmpty()) {
                User user = null;
                userContextServiceClient = new UserClient().getClient();
                try {
                    user = userContextServiceClient.getUserByEmail(userEmailId);
                } catch (UserContextException e) {
                    log.error("Could not fetch user for " + userEmailId, e);
                }

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

            // handling null values appropriately
            if (assigneeEmailId != null && !assigneeEmailId.isEmpty()) {
                long assigneeId = CRMAuthorizingRealm.getAgent(assigneeEmailId).getId();
                ticket.setAssigneeId(assigneeId);
                activity.setTicketAssigneeId(assigneeId);
            }

            crmServiceClient         = new CRMClient().getClient();
            crmServiceClient.insertTicket(ticket, activity);
        } catch (TException e) {
            log.error("Error while creating ticket", e);
            return EXCEPTION;
        }

        return getMyOpenTickets();
    }

    public String getMyOpenTickets() {
        try {
            Agent agent = CRMAuthorizingRealm.getAgent(currentAgentEmailId);

            SearchFilter searchFilter = new SearchFilter();
            searchFilter.setTicketAssigneeIds(Collections.singletonList(agent.getId()));
            crmServiceClient         = new CRMClient().getClient();
            for (Ticket ticket : crmServiceClient.getTickets(searchFilter)) {
                if (TicketStatus.OPEN.equals(ticket.getStatus())) {
                    tickets.add(ticket);
                }
            }
        } catch (TException e) {
            String errorString = "Error getting tickets for "
                    + currentAgentEmailId;
            log.error(errorString, e);
            addActionError(errorString);
        }

        return INDEX;
    }

    public String getMyTickets() {
        try {
            Agent agent = CRMAuthorizingRealm.getAgent(currentAgentEmailId);

            SearchFilter searchFilter = new SearchFilter();
            searchFilter.setTicketAssigneeIds(Collections.singletonList(agent.getId()));
            crmServiceClient         = new CRMClient().getClient();
            tickets = crmServiceClient.getTickets(searchFilter);
        } catch (TException e) {
            String errorString = "Error getting tickets for "
                    + currentAgentEmailId;
            log.error(errorString, e);
            addActionError(errorString);
        }

        return INDEX;
    }

    public String getUnassignedTickets() {
        try {
            crmServiceClient         = new CRMClient().getClient();
            tickets = crmServiceClient.getUnassignedTickets();
        } catch (TException e) {
            String errorString = "Error getting tickets for "
                    + currentAgentEmailId;
            log.error(errorString, e);
            addActionError(errorString);
        }

        return INDEX;
    }

    public String getAllTickets() {
        try {
            SearchFilter searchFilter = new SearchFilter();
            searchFilter.setTicketAssigneeIds(Collections.singletonList(CRMAuthorizingRealm.getAgent(currentAgentEmailId).getId()));
            crmServiceClient         = new CRMClient().getClient();
            tickets = crmServiceClient.getTickets(searchFilter);
        } catch (TException e) {
            String errorString = "Error getting tickets for "
                    + currentAgentEmailId;
            log.error(errorString, e);
            addActionError(errorString);
        }

        return INDEX;
    }

    public String getAllOpenTickets() {
        try {
            SearchFilter searchFilter = new SearchFilter();
            searchFilter.setTicketAssigneeIds(Collections.singletonList(CRMAuthorizingRealm.getAgent(currentAgentEmailId).getId()));
            crmServiceClient          = new CRMClient().getClient();
            for (Ticket ticket : crmServiceClient.getTickets(searchFilter)) {
                if (TicketStatus.OPEN.equals(ticket.getStatus())) {
                    tickets.add(ticket);
                }
            }
        } catch (TException e) {
            String errorString = "Error getting tickets for "
                    + currentAgentEmailId;
            log.error(errorString, e);
            addActionError(errorString);
        }

        return INDEX;
    }

    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 Agent getAgent(long agentId) throws TException {
        return CRMAuthorizingRealm.getAgent(agentId);
    }

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

    public TicketCategory[] getTicketCategories() {
        return TicketCategory.values();
    }

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

    public List<Ticket> getTickets() {
        return tickets;
    }

    public void setTickets(List<Ticket> tickets) {
        this.tickets = tickets;
    }

    public String getUserEmailId() {
        return userEmailId;
    }

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

    public String getDescription() {
        return description;
    }

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

    public String getAssigneeEmailId() {
        return assigneeEmailId;
    }

    public void setAssigneeEmailId(String assigneeEmailId) {
        this.assigneeEmailId = assigneeEmailId;
    }

    public String getPriority() {
        return priority;
    }

    public void setPriority(String priority) {
        this.priority = priority;
    }

    public String getCategory() {
        return category;
    }

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

    public String getOrderId() {
        return orderId;
    }

    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }
}