Subversion Repositories SmartDukaan

Rev

Blame | Last modification | View Log | RSS feed

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

import in.shop2020.crm.Activity;
import in.shop2020.crm.Agent;
import in.shop2020.crm.ContactMedium;
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 java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.thrift.TException;

/**
 * Action class for ticket pages in CRM tool.
 *
 * @author mandeep
 */
@SuppressWarnings("serial")
public class UserTicketsController extends BaseController {
    private Map<Long, Ticket> ticketsMap = new HashMap<Long, Ticket>();

    private long              userId;
    private String            id;
    private String            subject;
    private String            description;
    private String            ticketAssigneeEmailId;
    private String            ticketStatus;
    private String            ticketPriority;
    private String            ticketCategory;
    private String            contactMedium;
    private String            contactTimestamp;
    private String            contactingAgentEmailId;
    private Ticket            ticket;
    private Activity          lastActivity;
    private List<Activity>    activities;
    private long              orderId;

    public String index() throws Exception {
        createServiceClients();
        List<Ticket> ticketsList = crmServiceClient.getTickets(userId);
        if (ticketsList != null) {
            for (Ticket ticket : ticketsList) {
                ticketsMap.put(ticket.getId(), ticket);
            }
        }

        return INDEX;
    }

    public String editNew() {
        contactTimestamp = SDF.format(new Date());
        return EDIT_NEW;
    }

    public String update() throws Exception {
        createServiceClients();

        // Only subject and close date are editable fields for a ticket
        Ticket ticket = new Ticket();
        ticket.setId(Long.parseLong(id));
        ticket.setSubject(subject);

        // Update when a ticket is closed!
        if (TicketStatus.CLOSED.name().equals(ticketStatus)) {
            ticket.setCloseDate(new Date().getTime());
        }

        Activity activity = new Activity();
        long creatorId = crmServiceClient.getAgentByEmailId(currentAgentEmailId).getId();
        activity.setContactingAgentId(creatorId);
        activity.setDescription(description);
        activity.setContactMedium(ContactMedium.valueOf(contactMedium));
        activity.setTicketAssigneeId(crmServiceClient.getAgentByEmailId(
                ticketAssigneeEmailId).getId());
        activity.setTicketPriority(TicketPriority.valueOf(ticketPriority));
        activity.setTicketStatus(TicketStatus.valueOf(ticketStatus));
        activity.setContactTimestamp(SDF.parse(contactTimestamp).getTime());
        activity.setCreatorId(creatorId);
        activity.setTicketCategory(TicketCategory.valueOf(ticketCategory));

        crmServiceClient.updateTicket(ticket);
        activity.setTicketId(ticket.getId());
        crmServiceClient.insertActivity(activity);

        return index();
    }

    public String edit() throws TException, UserContextException {
        createServiceClients();
        long ticketId = Long.parseLong(id);
        ticket = crmServiceClient.getTicket(ticketId);
        lastActivity = crmServiceClient.getLastActivity(ticketId);
        activities = crmServiceClient.getActivitiesForTicket(Long.parseLong(id));
        contactTimestamp = SDF.format(new Date());
        return EDIT;
    }

    public Map<Long, Ticket> getTickets() {
        return ticketsMap;
    }

    public User getUser() throws UserContextException, TException {
        return userContextServiceClient.getUserById(userId);
    }

    public Activity getLastActivity(long ticketId) throws TException {
        return crmServiceClient.getLastActivity(ticketId);
    }

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

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

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

    public ContactMedium[] getContactMedia() {
        return ContactMedium.values();
    }

    public String create() throws Exception {
        createServiceClients();
        long creatorId = crmServiceClient.getAgentByEmailId(currentAgentEmailId).getId();
        Ticket ticket = new Ticket();
        ticket.setOpenDate(new Date().getTime());
        ticket.setSubject(subject);
        ticket.setCustomerId(userId);
        ticket.setCreatorId(creatorId);
        ticket.setOrderId(creatorId);

        Activity activity = new Activity();
        activity.setCustomerId(userId);
        activity.setContactingAgentId(creatorId);
        activity.setDescription(description);
        activity.setContactMedium(ContactMedium.valueOf(contactMedium));
        activity.setTicketAssigneeId(crmServiceClient.getAgentByEmailId(ticketAssigneeEmailId).getId());
        activity.setTicketPriority(TicketPriority.valueOf(ticketPriority));
        activity.setTicketStatus(TicketStatus.OPEN);
        activity.setContactTimestamp(SDF.parse(contactTimestamp).getTime());
        activity.setCreatorId(creatorId);
        activity.setTicketCategory(TicketCategory.valueOf(ticketCategory));

        activity.setTicketId(crmServiceClient.insertTicket(ticket));
        crmServiceClient.insertActivity(activity);

        return index();
    }

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

    public List<Agent> getAllAgents() throws TException
    {
        createServiceClients();
        return crmServiceClient.getAllAgents();
    }

    public Map<Long, Ticket> getTicketsMap() {
        return ticketsMap;
    }

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

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

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

    public void setTicketAssigneeEmailId(String ticketAssigneeEmailId) {
        this.ticketAssigneeEmailId = ticketAssigneeEmailId;
    }

    public void setTicketStatus(String ticketStatus) {
        this.ticketStatus = ticketStatus;
    }

    public void setTicketPriority(String ticketPriority) {
        this.ticketPriority = ticketPriority;
    }

    public void setContactMedium(String contactMedium) {
        this.contactMedium = contactMedium;
    }

    public void setContactTimestamp(String contactTimestamp) {
        this.contactTimestamp = contactTimestamp;
    }

    public void setContactingAgentEmailId(String contactingAgentEmailId) {
        this.contactingAgentEmailId = contactingAgentEmailId;
    }

    public void setId(String id) {
        this.id = id;
    }

    public Ticket getTicket() {
        return ticket;
    }

    public Activity getLastActivity() {
        return lastActivity;
    }

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

    public long getUserId() {
        return userId;
    }

    public String getContactTimestamp() {
        return contactTimestamp;
    }

    public String getTicketCategory() {
        return ticketCategory;
    }

    public void setTicketCategory(String ticketCategory) {
        this.ticketCategory = ticketCategory;
    }

    public long getOrderId() {
        return orderId;
    }

    public void setOrderId(String orderId) {
        if (orderId != null && !orderId.isEmpty()) {
            this.orderId = Long.parseLong(orderId);
        }
    }
}