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
 
3269 mandeep.dh 38
    private String              userId;
3206 mandeep.dh 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();
3269 mandeep.dh 57
            List<Ticket> ticketsList = crmServiceClient.getTickets(Long.parseLong(userId));
3106 mandeep.dh 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
            }
3090 mandeep.dh 89
 
3269 mandeep.dh 90
            if (activityDescription == null || activityDescription.isEmpty()) {
91
                activityDescription = "Updating ticket fields";
92
            }
93
 
3106 mandeep.dh 94
            Activity activity = new Activity();
95
            activity.setDescription(activityDescription);
96
            activity.setType(ActivityType.valueOf(activityType));
97
            activity.setTicketPriority(TicketPriority.valueOf(priority));
98
            activity.setTicketStatus(TicketStatus.valueOf(status));
99
            activity.setCreatorId(creatorId);
100
            activity.setTicketCategory(TicketCategory.valueOf(category));
101
            activity.setTicketDescription(description);
3090 mandeep.dh 102
 
3269 mandeep.dh 103
            if (userId != null && !userId.isEmpty()) {
104
                activity.setCustomerId(Long.parseLong(userId));
105
            }
106
 
3206 mandeep.dh 107
            log.info(activityType);
3269 mandeep.dh 108
            if (ActivityType.SEND_EMAIL_TO_CUSTOMER.equals(activity.getType())) {
3206 mandeep.dh 109
                log.info("Sending mail");
110
                Client helperClient = new HelperClient().getClient();
111
                activity.setEmailId(helperClient.saveUserEmailForSending(
112
                        userEmailId, CRMConstants.CRM_EMAIL_SENDOR, subject,
113
                        body, null, CRMConstants.CRM_EMAIL_TYPE));
114
 
115
                // We change activityType to OTHER when pop up box for email
116
                // closes
3269 mandeep.dh 117
                activity.setDescription("Subject: " + subject + "\n\n"
118
                        + "Body: " + body);
3206 mandeep.dh 119
            }
120
 
3106 mandeep.dh 121
            // handling null values appropriately
122
            if (assigneeEmailId != null && !assigneeEmailId.isEmpty()) {
123
                long assigneeId = crmServiceClient.getAgentByEmailId(
124
                        assigneeEmailId).getId();
125
                ticket.setAssigneeId(assigneeId);
126
                activity.setTicketAssigneeId(assigneeId);
127
            } else {
128
                ticket.setAssigneeIdIsSet(false);
129
                activity.setTicketAssigneeIdIsSet(false);
130
            }
3090 mandeep.dh 131
 
3206 mandeep.dh 132
            crmServiceClient.updateTicket(ticket, activity);
3106 mandeep.dh 133
        } catch (TException e) {
134
            log.error("Error while updating ticket", e);
135
            return EXCEPTION;
3269 mandeep.dh 136
        } catch (HelperServiceException hse) {
3206 mandeep.dh 137
            log.error("Error while sending mail", hse);
138
            return EXCEPTION;
139
        }
3106 mandeep.dh 140
 
3090 mandeep.dh 141
        return index();
142
    }
143
 
3106 mandeep.dh 144
    public String edit() {
145
        try {
146
            createServiceClients();
147
            long ticketId = Long.parseLong(id);
148
            ticket = crmServiceClient.getTicket(ticketId);
3206 mandeep.dh 149
            activities = crmServiceClient.getActivitiesForTicket(ticketId);
150
            subject = createSubjectString(ticket);
3269 mandeep.dh 151
            userId = String.valueOf(ticket.getCustomerId());
152
            userEmailId = ticket.getCustomerEmailId();
3106 mandeep.dh 153
        } catch (TException e) {
154
            log.error("Error while loading edit page", e);
155
            return EXCEPTION;
156
        }
157
 
3090 mandeep.dh 158
        return EDIT;
159
    }
160
 
3206 mandeep.dh 161
    private String createSubjectString(Ticket ticket) {
162
        return CRMConstants.CRM_SUBJECT_PREFIX_FOR_TICKET_ID + ticket.getId()
163
                + " " + ticket.getCategory().name();
164
    }
165
 
3090 mandeep.dh 166
    public Map<Long, Ticket> getTickets() {
167
        return ticketsMap;
168
    }
169
 
170
    public User getUser() throws UserContextException, TException {
3269 mandeep.dh 171
        return userContextServiceClient.getUserById(Long.parseLong(userId));
3090 mandeep.dh 172
    }
173
 
3137 mandeep.dh 174
    public Agent getAgent(long agentId) {
175
        Agent agent = null;
176
 
177
        try {
178
            agent = crmServiceClient.getAgent(agentId);
179
        } catch (TException e) {
180
            String errorString = "Could not get agent for " + agentId;
181
            log.error(errorString, e);
182
            addActionError(errorString);
183
        }
184
 
185
        return agent;
3090 mandeep.dh 186
    }
187
 
188
    public TicketStatus[] getTicketStatuses() {
189
        return TicketStatus.values();
190
    }
191
 
192
    public TicketPriority[] getTicketPriorities() {
193
        return TicketPriority.values();
194
    }
195
 
3106 mandeep.dh 196
    public String create() {
197
        try {
198
            createServiceClients();
3269 mandeep.dh 199
            long creatorId = crmServiceClient.getAgentByEmailId(currentAgentEmailId).getId();
3106 mandeep.dh 200
            Ticket ticket = new Ticket();
201
            ticket.setDescription(description);
202
            ticket.setCreatorId(creatorId);
203
            ticket.setStatus(TicketStatus.OPEN);
204
            ticket.setPriority(TicketPriority.valueOf(priority));
205
            ticket.setCategory(TicketCategory.valueOf(category));
3269 mandeep.dh 206
 
3106 mandeep.dh 207
            Activity activity = new Activity();
208
            // At creation of ticket activity's description is same as that of
209
            // ticket
3269 mandeep.dh 210
            activity.setDescription("Creating Ticket");
3106 mandeep.dh 211
            activity.setType(ActivityType.OTHER);
212
            activity.setTicketPriority(TicketPriority.valueOf(priority));
213
            activity.setTicketStatus(TicketStatus.OPEN);
214
            activity.setCreatorId(creatorId);
215
            activity.setTicketCategory(TicketCategory.valueOf(category));
216
            activity.setTicketDescription(description);
3090 mandeep.dh 217
 
3269 mandeep.dh 218
            if (userEmailId != null && !userEmailId.isEmpty()) {
219
                ticket.setCustomerEmailId(userEmailId);
220
            }
221
 
222
            if (orderId != null && !orderId.isEmpty()) {
223
                ticket.setOrderId(Long.parseLong(orderId));
224
            }
225
 
226
            if (userId != null && !userId.isEmpty()) {
227
                ticket.setCustomerId(Long.parseLong(userId));
228
                activity.setCustomerId(Long.parseLong(userId));
229
            }
230
 
3106 mandeep.dh 231
            // handling null values appropriately
232
            if (assigneeEmailId != null && !assigneeEmailId.isEmpty()) {
3269 mandeep.dh 233
                long assigneeId = crmServiceClient.getAgentByEmailId(assigneeEmailId).getId();
3106 mandeep.dh 234
                ticket.setAssigneeId(assigneeId);
235
                activity.setTicketAssigneeId(assigneeId);
236
            }
237
 
3206 mandeep.dh 238
            crmServiceClient.insertTicket(ticket, activity);
3106 mandeep.dh 239
        } catch (TException e) {
240
            log.error("Error while creating ticket", e);
241
            return EXCEPTION;
242
        }
243
 
3090 mandeep.dh 244
        return index();
245
    }
246
 
3106 mandeep.dh 247
    public String getLoggerRole() {
248
        try {
249
            createServiceClients();
3206 mandeep.dh 250
            return crmServiceClient.getRoleNamesForAgent(currentAgentEmailId)
251
                    .get(0);
3106 mandeep.dh 252
        } catch (TException e) {
253
            log.error("Error while getting roles", e);
254
            return AGENT;
255
        }
256
    }
257
 
258
    public TicketCategory[] getTicketCategories() {
3090 mandeep.dh 259
        return TicketCategory.values();
260
    }
261
 
3106 mandeep.dh 262
    public ActivityType[] getActivityTypes() {
263
        return ActivityType.values();
3090 mandeep.dh 264
    }
265
 
3106 mandeep.dh 266
    public List<Agent> getAllAgents() {
267
        List<Agent> agents = null;
268
 
269
        try {
270
            createServiceClients();
3206 mandeep.dh 271
            agents = crmServiceClient.getAllAgents();
272
        } catch (TException e) {
3106 mandeep.dh 273
            String errorString = "Error while getting roles";
274
            log.error(errorString, e);
275
            addActionError(errorString);
276
        }
277
 
278
        return agents;
279
    }
280
 
3090 mandeep.dh 281
    public Map<Long, Ticket> getTicketsMap() {
282
        return ticketsMap;
283
    }
284
 
285
    public void setUserId(String userId) {
3269 mandeep.dh 286
        this.userId = userId;
3090 mandeep.dh 287
    }
288
 
3106 mandeep.dh 289
    public void setOrderId(String orderId) {
290
        this.orderId = orderId;
3090 mandeep.dh 291
    }
292
 
3269 mandeep.dh 293
    public String getUserId() {
3106 mandeep.dh 294
        return 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
}