Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3090 mandeep.dh 1
/**
2
 * 
3
 */
4
package in.shop2020.serving.controllers;
5
 
6
import in.shop2020.crm.Activity;
3106 mandeep.dh 7
import in.shop2020.crm.ActivityType;
3090 mandeep.dh 8
import in.shop2020.crm.Agent;
9
import in.shop2020.crm.Ticket;
10
import in.shop2020.crm.TicketCategory;
11
import in.shop2020.crm.TicketPriority;
12
import in.shop2020.crm.TicketStatus;
13
import in.shop2020.model.v1.user.User;
14
import in.shop2020.model.v1.user.UserContextException;
3206 mandeep.dh 15
import in.shop2020.thrift.clients.HelperClient;
16
import in.shop2020.util.CRMConstants;
17
import in.shop2020.utils.HelperService.Client;
18
import in.shop2020.utils.HelperServiceException;
3090 mandeep.dh 19
 
20
import java.util.Date;
21
import java.util.HashMap;
22
import java.util.List;
23
import java.util.Map;
24
 
25
import org.apache.thrift.TException;
26
 
27
/**
28
 * Action class for ticket pages in CRM tool.
3106 mandeep.dh 29
 * 
3090 mandeep.dh 30
 * @author mandeep
31
 */
32
@SuppressWarnings("serial")
33
public class UserTicketsController extends BaseController {
3206 mandeep.dh 34
    private static final String AGENT      = "Agent";
3106 mandeep.dh 35
 
3206 mandeep.dh 36
    private Map<Long, Ticket>   ticketsMap = new HashMap<Long, Ticket>();
3090 mandeep.dh 37
 
3206 mandeep.dh 38
    private long                userId;
39
    private String              userEmailId;
40
    private String              id;
41
    private String              activityDescription;
42
    private String              description;
43
    private String              assigneeEmailId;
44
    private String              status;
45
    private String              priority;
46
    private String              category;
47
    private String              activityType;
48
    private Ticket              ticket;
49
    private List<Activity>      activities;
50
    private String              orderId;
51
    private String              subject;
52
    private String              body;
3090 mandeep.dh 53
 
3106 mandeep.dh 54
    public String index() {
55
        try {
56
            createServiceClients();
57
            List<Ticket> ticketsList = crmServiceClient.getTickets(userId);
58
            if (ticketsList != null) {
59
                for (Ticket ticket : ticketsList) {
60
                    ticketsMap.put(ticket.getId(), ticket);
61
                }
3090 mandeep.dh 62
            }
3106 mandeep.dh 63
        } catch (TException e) {
64
            log.error("Error while getting tickets", e);
65
            return EXCEPTION;
3090 mandeep.dh 66
        }
67
        return INDEX;
68
    }
69
 
3106 mandeep.dh 70
    public String update() {
71
        try {
72
            createServiceClients();
3090 mandeep.dh 73
 
3106 mandeep.dh 74
            long creatorId = crmServiceClient.getAgentByEmailId(
75
                    currentAgentEmailId).getId();
3090 mandeep.dh 76
 
3106 mandeep.dh 77
            // Only subject and close date are editable fields for a ticket
78
            Ticket ticket = new Ticket();
79
            ticket.setId(Long.parseLong(id));
80
            ticket.setDescription(description);
81
            ticket.setCategory(TicketCategory.valueOf(category));
82
            ticket.setPriority(TicketPriority.valueOf(priority));
83
            ticket.setStatus(TicketStatus.valueOf(status));
3090 mandeep.dh 84
 
3106 mandeep.dh 85
            // Update when a ticket is closed!
86
            if (TicketStatus.CLOSED.name().equals(status)) {
87
                ticket.setCloseDate(new Date().getTime());
88
            } else {
89
                ticket.setCloseDateIsSet(false);
90
            }
3090 mandeep.dh 91
 
3106 mandeep.dh 92
            Activity activity = new Activity();
93
            activity.setDescription(activityDescription);
94
            activity.setCustomerId(userId);
95
            activity.setType(ActivityType.valueOf(activityType));
96
            activity.setTicketPriority(TicketPriority.valueOf(priority));
97
            activity.setTicketStatus(TicketStatus.valueOf(status));
98
            activity.setCreatorId(creatorId);
99
            activity.setTicketCategory(TicketCategory.valueOf(category));
100
            activity.setTicketDescription(description);
3090 mandeep.dh 101
 
3206 mandeep.dh 102
            log.info(activityType);
103
            if (ActivityType.EMAIL_CUSTOMER.equals(activity.getType())) {
104
                log.info("Sending mail");
105
                Client helperClient = new HelperClient().getClient();
106
                activity.setEmailId(helperClient.saveUserEmailForSending(
107
                        userEmailId, CRMConstants.CRM_EMAIL_SENDOR, subject,
108
                        body, null, CRMConstants.CRM_EMAIL_TYPE));
109
 
110
                // We change activityType to OTHER when pop up box for email
111
                // closes
112
                activity.setDescription("Subject: " + subject + "----------" + "Body: " + body);
113
            }
114
 
3106 mandeep.dh 115
            // handling null values appropriately
116
            if (assigneeEmailId != null && !assigneeEmailId.isEmpty()) {
117
                long assigneeId = crmServiceClient.getAgentByEmailId(
118
                        assigneeEmailId).getId();
119
                ticket.setAssigneeId(assigneeId);
120
                activity.setTicketAssigneeId(assigneeId);
121
            } else {
122
                ticket.setAssigneeIdIsSet(false);
123
                activity.setTicketAssigneeIdIsSet(false);
124
            }
3090 mandeep.dh 125
 
3206 mandeep.dh 126
            crmServiceClient.updateTicket(ticket, activity);
3106 mandeep.dh 127
        } catch (TException e) {
128
            log.error("Error while updating ticket", e);
129
            return EXCEPTION;
130
        }
3206 mandeep.dh 131
        catch (HelperServiceException hse) {
132
            log.error("Error while sending mail", hse);
133
            return EXCEPTION;
134
        }
3106 mandeep.dh 135
 
3090 mandeep.dh 136
        return index();
137
    }
138
 
3106 mandeep.dh 139
    public String edit() {
140
        try {
141
            createServiceClients();
142
            long ticketId = Long.parseLong(id);
143
            ticket = crmServiceClient.getTicket(ticketId);
3206 mandeep.dh 144
            activities = crmServiceClient.getActivitiesForTicket(ticketId);
145
            subject = createSubjectString(ticket);
146
            userId = ticket.getCustomerId();
3106 mandeep.dh 147
        } catch (TException e) {
148
            log.error("Error while loading edit page", e);
149
            return EXCEPTION;
150
        }
151
 
3090 mandeep.dh 152
        return EDIT;
153
    }
154
 
3206 mandeep.dh 155
    private String createSubjectString(Ticket ticket) {
156
        return CRMConstants.CRM_SUBJECT_PREFIX_FOR_TICKET_ID + ticket.getId()
157
                + " " + ticket.getCategory().name();
158
    }
159
 
3090 mandeep.dh 160
    public Map<Long, Ticket> getTickets() {
161
        return ticketsMap;
162
    }
163
 
164
    public User getUser() throws UserContextException, TException {
165
        return userContextServiceClient.getUserById(userId);
166
    }
167
 
3137 mandeep.dh 168
    public Agent getAgent(long agentId) {
169
        Agent agent = null;
170
 
171
        try {
172
            agent = crmServiceClient.getAgent(agentId);
173
        } catch (TException e) {
174
            String errorString = "Could not get agent for " + agentId;
175
            log.error(errorString, e);
176
            addActionError(errorString);
177
        }
178
 
179
        return agent;
3090 mandeep.dh 180
    }
181
 
182
    public TicketStatus[] getTicketStatuses() {
183
        return TicketStatus.values();
184
    }
185
 
186
    public TicketPriority[] getTicketPriorities() {
187
        return TicketPriority.values();
188
    }
189
 
3106 mandeep.dh 190
    public String create() {
191
        try {
192
            createServiceClients();
193
            long creatorId = crmServiceClient.getAgentByEmailId(
194
                    currentAgentEmailId).getId();
195
            Ticket ticket = new Ticket();
196
            ticket.setDescription(description);
197
            ticket.setCustomerId(userId);
198
            ticket.setCreatorId(creatorId);
3090 mandeep.dh 199
 
3106 mandeep.dh 200
            if (orderId == null || orderId.isEmpty()) {
201
                ticket.setOrderIdIsSet(false);
3206 mandeep.dh 202
            } else {
3106 mandeep.dh 203
                ticket.setOrderId(Long.parseLong(orderId));
204
            }
3090 mandeep.dh 205
 
3106 mandeep.dh 206
            ticket.setStatus(TicketStatus.OPEN);
207
            ticket.setPriority(TicketPriority.valueOf(priority));
208
            ticket.setCategory(TicketCategory.valueOf(category));
3090 mandeep.dh 209
 
3106 mandeep.dh 210
            Activity activity = new Activity();
211
            // At creation of ticket activity's description is same as that of
212
            // ticket
213
            activity.setDescription(description);
214
            activity.setCustomerId(userId);
215
            activity.setType(ActivityType.OTHER);
216
            activity.setTicketPriority(TicketPriority.valueOf(priority));
217
            activity.setTicketStatus(TicketStatus.OPEN);
218
            activity.setCreatorId(creatorId);
219
            activity.setTicketCategory(TicketCategory.valueOf(category));
220
            activity.setTicketDescription(description);
3090 mandeep.dh 221
 
3106 mandeep.dh 222
            // handling null values appropriately
223
            if (assigneeEmailId != null && !assigneeEmailId.isEmpty()) {
224
                long assigneeId = crmServiceClient.getAgentByEmailId(
225
                        assigneeEmailId).getId();
226
                ticket.setAssigneeId(assigneeId);
227
                activity.setTicketAssigneeId(assigneeId);
228
            } else {
229
                ticket.setAssigneeIdIsSet(false);
230
                activity.setTicketAssigneeIdIsSet(false);
231
            }
232
 
3206 mandeep.dh 233
            crmServiceClient.insertTicket(ticket, activity);
234
 
3106 mandeep.dh 235
        } catch (TException e) {
236
            log.error("Error while creating ticket", e);
237
            return EXCEPTION;
238
        }
239
 
3090 mandeep.dh 240
        return index();
241
    }
242
 
3106 mandeep.dh 243
    public String getLoggerRole() {
244
        try {
245
            createServiceClients();
3206 mandeep.dh 246
            return crmServiceClient.getRoleNamesForAgent(currentAgentEmailId)
247
                    .get(0);
3106 mandeep.dh 248
        } catch (TException e) {
249
            log.error("Error while getting roles", e);
250
            return AGENT;
251
        }
252
    }
253
 
254
    public TicketCategory[] getTicketCategories() {
3090 mandeep.dh 255
        return TicketCategory.values();
256
    }
257
 
3106 mandeep.dh 258
    public ActivityType[] getActivityTypes() {
259
        return ActivityType.values();
3090 mandeep.dh 260
    }
261
 
3106 mandeep.dh 262
    public List<Agent> getAllAgents() {
263
        List<Agent> agents = null;
264
 
265
        try {
266
            createServiceClients();
3206 mandeep.dh 267
            agents = crmServiceClient.getAllAgents();
268
        } catch (TException e) {
3106 mandeep.dh 269
            String errorString = "Error while getting roles";
270
            log.error(errorString, e);
271
            addActionError(errorString);
272
        }
273
 
274
        return agents;
275
    }
276
 
3090 mandeep.dh 277
    public Map<Long, Ticket> getTicketsMap() {
278
        return ticketsMap;
279
    }
280
 
281
    public void setUserId(String userId) {
282
        this.userId = Long.parseLong(userId);
283
    }
284
 
3106 mandeep.dh 285
    public void setOrderId(String orderId) {
286
        this.orderId = orderId;
3090 mandeep.dh 287
    }
288
 
3106 mandeep.dh 289
    public long getUserId() {
290
        return userId;
291
    }
292
 
293
    public void setUserId(long userId) {
294
        this.userId = userId;
295
    }
296
 
297
    public String getId() {
298
        return id;
299
    }
300
 
301
    public void setId(String id) {
302
        this.id = id;
303
    }
304
 
305
    public String getActivityDescription() {
306
        return activityDescription;
307
    }
308
 
309
    public void setActivityDescription(String activityDescription) {
310
        this.activityDescription = activityDescription;
311
    }
312
 
313
    public String getDescription() {
314
        return description;
315
    }
316
 
3090 mandeep.dh 317
    public void setDescription(String description) {
318
        this.description = description;
319
    }
320
 
3106 mandeep.dh 321
    public String getAssigneeEmailId() {
322
        return assigneeEmailId;
3090 mandeep.dh 323
    }
324
 
3106 mandeep.dh 325
    public void setAssigneeEmailId(String assigneeEmailId) {
326
        this.assigneeEmailId = assigneeEmailId;
3090 mandeep.dh 327
    }
328
 
3106 mandeep.dh 329
    public String getStatus() {
330
        return status;
3090 mandeep.dh 331
    }
332
 
3106 mandeep.dh 333
    public void setStatus(String status) {
334
        this.status = status;
3090 mandeep.dh 335
    }
336
 
3106 mandeep.dh 337
    public String getPriority() {
338
        return priority;
3090 mandeep.dh 339
    }
340
 
3106 mandeep.dh 341
    public void setPriority(String priority) {
342
        this.priority = priority;
3090 mandeep.dh 343
    }
344
 
3106 mandeep.dh 345
    public String getCategory() {
346
        return category;
3090 mandeep.dh 347
    }
348
 
3106 mandeep.dh 349
    public void setCategory(String category) {
350
        this.category = category;
3090 mandeep.dh 351
    }
352
 
3106 mandeep.dh 353
    public String getActivityType() {
354
        return activityType;
3090 mandeep.dh 355
    }
356
 
3106 mandeep.dh 357
    public void setActivityType(String activityType) {
358
        this.activityType = activityType;
3090 mandeep.dh 359
    }
360
 
3106 mandeep.dh 361
    public Ticket getTicket() {
362
        return ticket;
3090 mandeep.dh 363
    }
364
 
3106 mandeep.dh 365
    public void setTicket(Ticket ticket) {
366
        this.ticket = ticket;
3090 mandeep.dh 367
    }
368
 
3106 mandeep.dh 369
    public List<Activity> getActivities() {
370
        return activities;
3090 mandeep.dh 371
    }
372
 
3106 mandeep.dh 373
    public void setActivities(List<Activity> activities) {
374
        this.activities = activities;
3090 mandeep.dh 375
    }
376
 
3106 mandeep.dh 377
    public String getOrderId() {
3090 mandeep.dh 378
        return orderId;
379
    }
380
 
3106 mandeep.dh 381
    public void setTicketsMap(Map<Long, Ticket> ticketsMap) {
382
        this.ticketsMap = ticketsMap;
3090 mandeep.dh 383
    }
3206 mandeep.dh 384
 
385
    public String getSubject() {
386
        return subject;
387
    }
388
 
389
    public void setSubject(String subject) {
390
        this.subject = subject;
391
    }
392
 
393
    public String getBody() {
394
        return body;
395
    }
396
 
397
    public void setBody(String body) {
398
        this.body = body;
399
    }
400
 
401
    public String getUserEmailId() {
402
        return userEmailId;
403
    }
404
 
405
    public void setUserEmailId(String userEmailId) {
406
        this.userEmailId = userEmailId;
407
    }
3090 mandeep.dh 408
}