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