Subversion Repositories SmartDukaan

Rev

Rev 5168 | Rev 5851 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3024 mandeep.dh 1
/**
2
 * 
3
 */
4
package in.shop2020.crm.service.handler;
5
 
6
import in.shop2020.crm.Activity;
3390 mandeep.dh 7
import in.shop2020.crm.ActivityType;
3024 mandeep.dh 8
import in.shop2020.crm.Agent;
9
import in.shop2020.crm.CRMService.Iface;
3390 mandeep.dh 10
import in.shop2020.crm.SearchFilter;
3024 mandeep.dh 11
import in.shop2020.crm.Ticket;
12
import in.shop2020.crm.handler.ActivityHandler;
13
import in.shop2020.crm.handler.AgentHandler;
14
import in.shop2020.crm.handler.TicketHandler;
15
 
16
import java.text.ParseException;
17
import java.util.ArrayList;
3339 mandeep.dh 18
import java.util.Date;
3024 mandeep.dh 19
import java.util.List;
20
 
3499 mandeep.dh 21
import org.apache.commons.logging.Log;
22
import org.apache.commons.logging.LogFactory;
3024 mandeep.dh 23
import org.apache.thrift.TException;
24
import org.springframework.context.ApplicationContext;
25
import org.springframework.context.support.ClassPathXmlApplicationContext;
26
import org.springframework.stereotype.Service;
3206 mandeep.dh 27
import org.springframework.transaction.annotation.Transactional;
3024 mandeep.dh 28
 
29
/**
30
 * Implementation of the interface/services exposed by thrift to clients!
31
 * 
32
 * @author mandeep
33
 */
34
@Service
35
public class CRMServiceHandler implements Iface {
3499 mandeep.dh 36
    private static final Log log = LogFactory.getLog(CRMServiceHandler.class);
37
 
4008 mandeep.dh 38
    private TicketHandler      ticketHandler;
39
    private ActivityHandler    activityHandler;
40
    private AgentHandler       agentHandler;
41
 
42
    public CRMServiceHandler() {
43
        log.info("Creating context");
44
        ApplicationContext context = new ClassPathXmlApplicationContext("context.xml");
45
        ticketHandler              = context.getBean(TicketHandler.class);
46
        activityHandler            = context.getBean(ActivityHandler.class);
47
        agentHandler               = context.getBean(AgentHandler.class);
48
    }
49
 
3390 mandeep.dh 50
    public List<Ticket> getTickets(SearchFilter searchFilter) throws TException {
3024 mandeep.dh 51
        List<Ticket> ttickets = new ArrayList<Ticket>();
3390 mandeep.dh 52
        for (in.shop2020.crm.domain.Ticket ticket : ticketHandler
53
                .getTickets(in.shop2020.crm.domain.SearchFilter
54
                        .create(searchFilter))) {
3024 mandeep.dh 55
            ttickets.add(ticket.getThriftTicket());
56
        }
57
 
58
        return ttickets;
59
    }
60
 
3390 mandeep.dh 61
    public List<Ticket> getUnassignedTickets() throws TException {
62
        List<Ticket> tickets = new ArrayList<Ticket>();
63
 
64
        for (in.shop2020.crm.domain.Ticket ticket : ticketHandler
65
                .getUnassignedTickets()) {
66
            tickets.add(ticket.getThriftTicket());
67
        }
68
 
69
        return tickets;
70
    }
71
 
3206 mandeep.dh 72
    @Transactional
3390 mandeep.dh 73
    public void updateTicket(Ticket ticket, Activity activity)
74
            throws TException {
3024 mandeep.dh 75
        try {
76
            ticketHandler.updateTicket(in.shop2020.crm.domain.Ticket
77
                    .create(ticket));
3206 mandeep.dh 78
            activity.setTicketId(ticket.getId());
3390 mandeep.dh 79
            activityHandler.insertActivity(in.shop2020.crm.domain.Activity
80
                    .create(activity));
3024 mandeep.dh 81
        } catch (ParseException e) {
82
            throw new TException("Could not update " + ticket, e);
83
        }
84
    }
85
 
3206 mandeep.dh 86
    @Transactional
3390 mandeep.dh 87
    public long insertTicket(Ticket ticket, Activity activity)
88
            throws TException {
3024 mandeep.dh 89
        try {
3390 mandeep.dh 90
            long ticketId = ticketHandler
91
                    .insertTicket(in.shop2020.crm.domain.Ticket.create(ticket));
3206 mandeep.dh 92
            activity.setTicketId(ticketId);
3390 mandeep.dh 93
            activityHandler.insertActivity(in.shop2020.crm.domain.Activity
94
                    .create(activity));
3206 mandeep.dh 95
            return ticketId;
3024 mandeep.dh 96
        } catch (ParseException e) {
97
            throw new TException("Could not insert " + ticket, e);
98
        }
99
    }
100
 
3390 mandeep.dh 101
    public List<Activity> getActivities(SearchFilter searchFilter)
102
            throws TException {
3024 mandeep.dh 103
        List<Activity> tactivities = new ArrayList<Activity>();
3168 mandeep.dh 104
        List<in.shop2020.crm.domain.Activity> activities = activityHandler
3390 mandeep.dh 105
                .getActivities(in.shop2020.crm.domain.SearchFilter
106
                        .create(searchFilter));
107
 
3168 mandeep.dh 108
        if (activities != null) {
109
            for (in.shop2020.crm.domain.Activity ticket : activities) {
110
                tactivities.add(ticket.getThriftActivity());
111
            }
3024 mandeep.dh 112
        }
3390 mandeep.dh 113
 
3024 mandeep.dh 114
        return tactivities;
115
    }
116
 
3405 mandeep.dh 117
    public long insertActivity(Activity activity) throws TException {
3024 mandeep.dh 118
        try {
3405 mandeep.dh 119
            return activityHandler.insertActivity(in.shop2020.crm.domain.Activity
3024 mandeep.dh 120
                    .create(activity));
121
        } catch (ParseException e) {
122
            throw new TException("Could not insert " + activity, e);
123
        }
124
    }
125
 
3390 mandeep.dh 126
    @Transactional
127
    public void markAsRead(long activityId, long agentId) throws TException {
128
        in.shop2020.crm.domain.SearchFilter searchFilter = new in.shop2020.crm.domain.SearchFilter();
129
        searchFilter.setActivityId(activityId);
130
        activityHandler.markAsRead(activityId);
3168 mandeep.dh 131
        in.shop2020.crm.domain.Activity activity = activityHandler
3390 mandeep.dh 132
                .getActivities(searchFilter).get(0);
4089 mandeep.dh 133
 
134
        // Setting activity fields from latest ticket fields
135
        if (activity.getTicketId() != null) {
136
            searchFilter.setTicketId(activity.getTicketId());
137
            in.shop2020.crm.domain.Ticket ticket = ticketHandler.getTickets(searchFilter).get(0);
138
            activity.setTicketAssigneeId(ticket.getAssigneeId());
139
            activity.setTicketCategory(ticket.getCategory());
140
            activity.setTicketDescription(ticket.getDescription());
141
            activity.setTicketPriority(ticket.getPriority());
142
            activity.setTicketStatus(ticket.getStatus());
143
        }
144
 
3390 mandeep.dh 145
        activity.setCreatorId(agentId);
146
        activity.setDescription("Marked as read ticketId: "
147
                + activity.getTicketId() + ", activityId: " + activityId);
148
        activity.setType(ActivityType.OTHER);
149
        activityHandler.insertActivity(activity);
3024 mandeep.dh 150
    }
151
 
3390 mandeep.dh 152
    public List<Agent> getAgents(SearchFilter searchFilter) throws TException {
153
        List<Agent> agents = new ArrayList<Agent>();
3024 mandeep.dh 154
 
3390 mandeep.dh 155
        for (in.shop2020.crm.domain.Agent agent : agentHandler
156
                .getAgents(in.shop2020.crm.domain.SearchFilter
157
                        .create(searchFilter))) {
158
            agents.add(agent.getThriftAgent());
3024 mandeep.dh 159
        }
160
 
3390 mandeep.dh 161
        return agents;
3024 mandeep.dh 162
    }
5286 amar.kumar 163
 
164
    public List<Agent> getInactiveAgents(SearchFilter searchFilter) throws TException {
165
        List<Agent> agents = new ArrayList<Agent>();
3024 mandeep.dh 166
 
5286 amar.kumar 167
        for (in.shop2020.crm.domain.Agent agent : agentHandler
168
                .getInactiveAgents(in.shop2020.crm.domain.SearchFilter
169
                        .create(searchFilter))) {
170
            agents.add(agent.getThriftAgent());
171
        }
172
 
173
        return agents;
174
    }
175
 
3390 mandeep.dh 176
    public void updatePasswordForAgent(String agentEmailId, String password)
3339 mandeep.dh 177
            throws TException {
3390 mandeep.dh 178
        agentHandler.updatePasswordForAgent(agentEmailId, password);
179
    }
3339 mandeep.dh 180
 
3390 mandeep.dh 181
    public long getLastEmailProcessedTimestamp() throws TException {
182
        return agentHandler.getLastEmailProcessedTimestamp().getTime();
3339 mandeep.dh 183
    }
184
 
3390 mandeep.dh 185
    public void updateLastEmailProcessedTimestamp(long timestamp)
3024 mandeep.dh 186
            throws TException {
3390 mandeep.dh 187
        agentHandler.updateLastEmailProcessedTimestamp(new Date(timestamp));
3024 mandeep.dh 188
    }
189
 
3088 mandeep.dh 190
    public List<String> getRoleNamesForAgent(String agentEmailId)
3168 mandeep.dh 191
            throws TException {
3088 mandeep.dh 192
        return agentHandler.getRoleNamesForAgent(agentEmailId);
193
    }
194
 
195
    public List<String> getPermissionsForRoleName(String roleName)
3168 mandeep.dh 196
            throws TException {
3088 mandeep.dh 197
        return agentHandler.getPermissionsForRoleName(roleName);
198
    }
4793 amar.kumar 199
 
200
    public void changeAgentStatus(boolean status, String emailId)
201
    		throws TException {
202
    	agentHandler.changeAgentStatus(status, emailId);
203
    }
3088 mandeep.dh 204
 
3375 rajveer 205
	public boolean isAlive() throws TException {
4624 mandeep.dh 206
        try {
207
            return !agentHandler.getAgents(null).isEmpty();
208
        } catch (Exception e) {
209
            log.error("Could not fetch agents", e);
210
        }
3375 rajveer 211
 
4624 mandeep.dh 212
        return false;
213
    }
214
 
3375 rajveer 215
	public void closeSession() throws TException {
216
	}
4793 amar.kumar 217
 
218
	public void insertAgent(Agent agent, List<String> role) throws TException {
219
		agentHandler.insertAgent(in.shop2020.crm.domain.Agent.create(agent), role);
220
	}
221
 
222
	public void unassignAgentTickets(int assigneeId) {
223
		ticketHandler.unassignAgentTickets(assigneeId);
224
	}
5168 amar.kumar 225
 
226
	public void changeAgentRole(long id, List<String> role) {
227
		agentHandler.changeAgentRole(id,role);
228
	}
229
 
230
	public int getOpenTicketCountForAgent(long agentId) {
231
		return ticketHandler.getOpenTicketCountForAgent(agentId);
232
	}
3024 mandeep.dh 233
}