Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
3137 mandeep.dh 1
/**
2
 * 
3
 */
4
package in.shop2020.serving.controllers;
5
 
3339 mandeep.dh 6
import in.shop2020.crm.Activity;
7
import in.shop2020.crm.ActivityType;
3137 mandeep.dh 8
import in.shop2020.crm.Agent;
3390 mandeep.dh 9
import in.shop2020.crm.SearchFilter;
3137 mandeep.dh 10
import in.shop2020.crm.Ticket;
3339 mandeep.dh 11
import in.shop2020.crm.TicketCategory;
12
import in.shop2020.crm.TicketPriority;
3137 mandeep.dh 13
import in.shop2020.crm.TicketStatus;
3546 mandeep.dh 14
import in.shop2020.model.v1.order.LineItem;
15
import in.shop2020.model.v1.order.Order;
16
import in.shop2020.model.v1.order.OrderStatus;
17
import in.shop2020.model.v1.order.TransactionServiceException;
3137 mandeep.dh 18
import in.shop2020.model.v1.user.User;
19
import in.shop2020.model.v1.user.UserContextException;
3578 mandeep.dh 20
import in.shop2020.payments.Payment;
21
import in.shop2020.payments.PaymentException;
22
import in.shop2020.payments.PaymentStatus;
3390 mandeep.dh 23
import in.shop2020.serving.auth.CRMAuthorizingRealm;
24
import in.shop2020.thrift.clients.CRMClient;
3405 mandeep.dh 25
import in.shop2020.thrift.clients.HelperClient;
3578 mandeep.dh 26
import in.shop2020.thrift.clients.PaymentClient;
3546 mandeep.dh 27
import in.shop2020.thrift.clients.TransactionClient;
3390 mandeep.dh 28
import in.shop2020.thrift.clients.UserClient;
3405 mandeep.dh 29
import in.shop2020.util.CRMConstants;
4020 mandeep.dh 30
import in.shop2020.util.CRMConstants.EscalationMatrix;
4241 anupam.sin 31
import in.shop2020.util.CRMConstants.CODCancelMatrix;
3405 mandeep.dh 32
import in.shop2020.utils.HelperService.Client;
33
import in.shop2020.utils.HelperServiceException;
3546 mandeep.dh 34
import in.shop2020.utils.ModelUtils;
3137 mandeep.dh 35
 
3397 mandeep.dh 36
import java.text.ParseException;
3137 mandeep.dh 37
import java.util.ArrayList;
3578 mandeep.dh 38
import java.util.Calendar;
3390 mandeep.dh 39
import java.util.Collections;
3405 mandeep.dh 40
import java.util.Date;
3137 mandeep.dh 41
import java.util.List;
42
 
4256 mandeep.dh 43
import net.htmlparser.jericho.Source;
44
 
3405 mandeep.dh 45
import org.apache.shiro.SecurityUtils;
3137 mandeep.dh 46
import org.apache.thrift.TException;
3546 mandeep.dh 47
import org.apache.thrift.transport.TTransportException;
3137 mandeep.dh 48
 
49
/**
50
 * @author mandeep
51
 * 
52
 */
53
public class TicketsController extends BaseController {
54
 
55
    /**
56
     * 
57
     */
58
    private static final long serialVersionUID = 1L;
59
 
60
    List<Ticket>              tickets          = new ArrayList<Ticket>();
3405 mandeep.dh 61
    private String            customerEmailId;
3339 mandeep.dh 62
    private String            description;
63
    private String            assigneeEmailId;
64
    private String            priority;
65
    private String            category;
66
    private String            orderId;
3397 mandeep.dh 67
    private String[]          agentIds;
68
    private String            startTimestamp;
69
    private String            endTimestamp;
3137 mandeep.dh 70
 
3405 mandeep.dh 71
    private String            userId;
72
    private String            id;
73
    private String            activityDescription;
74
    private String            status;
75
    private String            activityType;
76
    private Ticket            ticket;
77
    private List<Activity>    activities;
78
    private String            subject;
79
    private String            body;
80
    private String            customerName;
81
    private String            customerMobileNumber;
3546 mandeep.dh 82
    private User              user;
83
    private String            orderStatus;
84
    private List<Order>       orders;
4020 mandeep.dh 85
    private String            escalate;
4241 anupam.sin 86
    private String            cancelReason;
3405 mandeep.dh 87
 
88
    public String index() {
89
        try {
90
            if (id != null && !id.isEmpty()) {
91
                SearchFilter searchFilter = new SearchFilter();
92
                crmServiceClient = new CRMClient().getClient();
93
                searchFilter.setTicketId(Long.parseLong(id));
94
                tickets = crmServiceClient.getTickets(searchFilter);
95
            }
96
        } catch (TException e) {
97
            log.error("Error while getting tickets", e);
98
            return EXCEPTION;
99
        }
100
 
101
        return INDEX;
102
    }
103
 
104
    public String edit() {
105
        try {
106
            long ticketId = Long.parseLong(id);
107
            SearchFilter searchFilter = new SearchFilter();
108
            searchFilter.setTicketId(ticketId);
109
            crmServiceClient = new CRMClient().getClient();
110
            ticket = crmServiceClient.getTickets(searchFilter).get(0);
111
            activities = crmServiceClient.getActivities(searchFilter);
112
            subject = createSubjectString(ticket);
113
 
114
            if (ticket.isSetCustomerId()) {
115
                userId = String.valueOf(ticket.getCustomerId());
3546 mandeep.dh 116
                userContextServiceClient = new UserClient().getClient();
117
 
118
                try {
119
                    user = userContextServiceClient.getUserById(ticket
120
                            .getCustomerId());
121
                } catch (UserContextException e) {
122
                    log.error("Could not fetch user details", e);
123
                }
3405 mandeep.dh 124
            }
125
 
126
            customerEmailId = ticket.getCustomerEmailId();
3546 mandeep.dh 127
 
128
            if (TicketCategory.COD_VERIFICATION.equals(ticket.getCategory())) {
129
                log.info("Fetching orders for " + ticket.getCustomerId());
130
                orders = new ArrayList<Order>();
131
                transactionServiceClient = new TransactionClient().getClient();
132
                for (Order order : transactionServiceClient
133
                        .getOrdersForCustomer(ticket.getCustomerId(), 0, 0,
134
                                Collections.singletonList(OrderStatus.INIT))) {
135
                    log.info("Processing Order: " + order);
136
                    if (order.isCod()) {
137
                        orders.add(order);
138
                    }
139
                }
140
            }
3578 mandeep.dh 141
 
142
            if (TicketCategory.FAILED_PAYMENTS.equals(ticket.getCategory())) {
143
                log.info("Fetching orders for " + ticket.getCustomerId());
144
                orders = new ArrayList<Order>();
145
                in.shop2020.payments.PaymentService.Client paymentClient = new PaymentClient().getClient();
146
 
147
                long failedTransactionId = -1;
148
                long lastfailedTransactionTimestamp = -1;
149
                for (Payment payment : paymentClient.getPaymentsForUser(ticket.getCustomerId(), 0, getTomorrow().getTime(), PaymentStatus.FAILED, 0)) {
150
                    if (payment.getErrorTimestamp() > lastfailedTransactionTimestamp) {
151
                        failedTransactionId = payment.getMerchantTxnId();
152
                    }
153
                }
154
 
155
                transactionServiceClient = new TransactionClient().getClient();
156
                orders.addAll(transactionServiceClient.getOrdersForTransaction(failedTransactionId, ticket.getCustomerId()));
157
            }
4008 mandeep.dh 158
 
159
            if (TicketCategory.DELAYED_DELIVERY.equals(ticket.getCategory())) {
160
                log.info("Fetching orders for " + ticket.getCustomerId());
161
                orders = new ArrayList<Order>();
162
                transactionServiceClient = new TransactionClient().getClient();
163
 
164
                for (Order order : transactionServiceClient.getOrdersForCustomer(ticket.getCustomerId(), 0, 0, null)) {
165
                    if (order.getExpected_delivery_time() > order.getPromised_delivery_time() && order.getExpected_delivery_time() > new Date().getTime()) {
166
                        orders.add(order);
167
                    }
168
                }
169
            }
3405 mandeep.dh 170
        } catch (TException e) {
3546 mandeep.dh 171
            log.error("Error loading edit page", e);
172
        } catch (NumberFormatException e) {
173
            log.error("Error parsing orderId", e);
174
        } catch (TransactionServiceException e) {
175
            log.error("Error fetching orders for " + ticket.getCustomerId(), e);
3578 mandeep.dh 176
        } catch (PaymentException e) {
177
            log.error("Error fetching payments for " + ticket.getCustomerId(), e);
3405 mandeep.dh 178
        }
179
 
180
        return EDIT;
181
    }
182
 
183
    private String createSubjectString(Ticket ticket) {
184
        return CRMConstants.CRM_SUBJECT_PREFIX_FOR_TICKET_ID + ticket.getId()
185
                + " " + ticket.getCategory().name();
186
    }
187
 
3578 mandeep.dh 188
    private Date getTomorrow() {
189
        Calendar calendar = Calendar.getInstance();
190
        calendar.setTime(new Date());
191
        calendar.add(Calendar.DAY_OF_MONTH, 1);
192
        return calendar.getTime();
193
    }
194
 
3339 mandeep.dh 195
    public String create() {
196
        try {
3546 mandeep.dh 197
            long creatorId = CRMAuthorizingRealm.getAgent(currentAgentEmailId)
198
                    .getId();
3339 mandeep.dh 199
            Ticket ticket = new Ticket();
200
            ticket.setDescription(description);
201
            ticket.setCreatorId(creatorId);
202
            ticket.setStatus(TicketStatus.OPEN);
203
            ticket.setPriority(TicketPriority.valueOf(priority));
204
            ticket.setCategory(TicketCategory.valueOf(category));
205
 
206
            Activity activity = new Activity();
207
            activity.setDescription("Creating Ticket");
208
            activity.setType(ActivityType.OTHER);
209
            activity.setTicketPriority(TicketPriority.valueOf(priority));
210
            activity.setTicketStatus(TicketStatus.OPEN);
211
            activity.setCreatorId(creatorId);
212
            activity.setTicketCategory(TicketCategory.valueOf(category));
213
            activity.setTicketDescription(description);
214
 
215
            if (orderId != null && !orderId.isEmpty()) {
216
                ticket.setOrderId(Long.parseLong(orderId));
217
            }
218
 
3405 mandeep.dh 219
            if (userId != null && !userId.isEmpty()) {
220
                ticket.setCustomerId(Long.parseLong(userId));
221
                activity.setCustomerId(Long.parseLong(userId));
3546 mandeep.dh 222
            } else {
3390 mandeep.dh 223
                User user = null;
224
                userContextServiceClient = new UserClient().getClient();
225
                try {
3405 mandeep.dh 226
                    if (customerName != null && !customerName.isEmpty()) {
227
                        ticket.setCustomerName(customerName);
228
                        activity.setCustomerName(customerName);
229
                    }
230
 
231
                    if (customerEmailId != null && !customerEmailId.isEmpty()) {
232
                        ticket.setCustomerEmailId(customerEmailId);
233
                        activity.setCustomerEmailId(customerEmailId);
3546 mandeep.dh 234
                        user = userContextServiceClient
235
                                .getUserByEmail(customerEmailId);
3405 mandeep.dh 236
                    }
237
 
3546 mandeep.dh 238
                    if ((user == null || user.getUserId() == -1)
239
                            && customerMobileNumber != null
240
                            && !customerMobileNumber.isEmpty()) {
3405 mandeep.dh 241
                        ticket.setCustomerMobileNumber(customerMobileNumber);
242
                        activity.setCustomerMobileNumber(customerMobileNumber);
3546 mandeep.dh 243
                        user = userContextServiceClient
244
                                .getUserByMobileNumber(Long
245
                                        .parseLong(customerMobileNumber));
3405 mandeep.dh 246
                    }
3390 mandeep.dh 247
                } catch (UserContextException e) {
3546 mandeep.dh 248
                    log.error("Could not fetch user for: " + customerEmailId
249
                            + " " + customerMobileNumber + " " + customerName,
250
                            e);
3390 mandeep.dh 251
                }
3546 mandeep.dh 252
 
3390 mandeep.dh 253
                if (user != null && user.getUserId() != -1) {
254
                    ticket.setCustomerId(user.getUserId());
255
                    activity.setCustomerId(user.getUserId());
256
                }
3339 mandeep.dh 257
            }
258
 
259
            // handling null values appropriately
260
            if (assigneeEmailId != null && !assigneeEmailId.isEmpty()) {
3546 mandeep.dh 261
                long assigneeId = CRMAuthorizingRealm.getAgent(assigneeEmailId)
262
                        .getId();
3339 mandeep.dh 263
                ticket.setAssigneeId(assigneeId);
264
                activity.setTicketAssigneeId(assigneeId);
265
            }
266
 
3546 mandeep.dh 267
            crmServiceClient = new CRMClient().getClient();
268
            id = String
269
                    .valueOf(crmServiceClient.insertTicket(ticket, activity));
3339 mandeep.dh 270
        } catch (TException e) {
271
            log.error("Error while creating ticket", e);
272
            return EXCEPTION;
273
        }
274
 
3405 mandeep.dh 275
        return index();
3339 mandeep.dh 276
    }
277
 
3405 mandeep.dh 278
    public boolean isAssigneeEditable() {
279
        return SecurityUtils.getSubject().hasRole("TeamLead");
280
    }
281
 
3397 mandeep.dh 282
    public String searchTickets() throws ParseException {
3137 mandeep.dh 283
        try {
3397 mandeep.dh 284
            SearchFilter searchFilter = new SearchFilter();
3405 mandeep.dh 285
            if (userId != null && !userId.isEmpty()) {
286
                searchFilter.setCustomerId(Long.parseLong(userId));
287
            }
288
 
3397 mandeep.dh 289
            if (agentIds != null && agentIds.length != 0) {
290
                searchFilter.setTicketAssigneeIds(new ArrayList<Long>());
291
                for (String agentId : agentIds) {
3546 mandeep.dh 292
                    searchFilter.getTicketAssigneeIds().add(
293
                            CRMAuthorizingRealm.getAgent(agentId).getId());
3397 mandeep.dh 294
                }
295
            }
3137 mandeep.dh 296
 
3397 mandeep.dh 297
            if (startTimestamp != null && !startTimestamp.isEmpty()) {
3546 mandeep.dh 298
                searchFilter.setStartTimestamp(SDF.parse(startTimestamp)
299
                        .getTime());
3397 mandeep.dh 300
            }
301
 
302
            if (endTimestamp != null && !endTimestamp.isEmpty()) {
303
                searchFilter.setEndTimestamp(SDF.parse(endTimestamp).getTime());
304
            }
305
 
3422 mandeep.dh 306
            if (id != null && !id.isEmpty()) {
307
                searchFilter.setTicketId(Long.parseLong(id));
308
            }
309
 
3499 mandeep.dh 310
            if (status != null && !status.isEmpty()) {
3972 mandeep.dh 311
                searchFilter.setTicketStatuses(new ArrayList<TicketStatus>());
312
                searchFilter.getTicketStatuses().add(TicketStatus.valueOf(status));
313
                if (TicketStatus.OPEN.name().equals(status)) {
314
                    searchFilter.getTicketStatuses().add(TicketStatus.REOPEN);
315
                }
3499 mandeep.dh 316
            }
317
 
318
            if (category != null && !category.isEmpty()) {
3546 mandeep.dh 319
                searchFilter
320
                        .setTicketCategory(TicketCategory.valueOf(category));
3499 mandeep.dh 321
            }
322
 
3546 mandeep.dh 323
            crmServiceClient = new CRMClient().getClient();
3405 mandeep.dh 324
            tickets = crmServiceClient.getTickets(searchFilter);
3137 mandeep.dh 325
        } catch (TException e) {
326
            String errorString = "Error getting tickets for "
327
                    + currentAgentEmailId;
328
            log.error(errorString, e);
329
            addActionError(errorString);
330
        }
331
 
3405 mandeep.dh 332
        return index();
3137 mandeep.dh 333
    }
334
 
335
    public String getUnassignedTickets() {
336
        try {
3546 mandeep.dh 337
            crmServiceClient = new CRMClient().getClient();
3137 mandeep.dh 338
            tickets = crmServiceClient.getUnassignedTickets();
339
        } catch (TException e) {
3339 mandeep.dh 340
            String errorString = "Error getting tickets for "
341
                    + currentAgentEmailId;
3137 mandeep.dh 342
            log.error(errorString, e);
343
            addActionError(errorString);
344
        }
345
 
3405 mandeep.dh 346
        return index();
3137 mandeep.dh 347
    }
348
 
3405 mandeep.dh 349
    public String update() {
350
        try {
351
            long creatorId = CRMAuthorizingRealm.getAgent(currentAgentEmailId)
352
                    .getId();
353
 
3546 mandeep.dh 354
            SearchFilter searchFilter = new SearchFilter();
355
            searchFilter.setTicketId(Long.parseLong(id));
356
            crmServiceClient = new CRMClient().getClient();
357
            Ticket ticket = crmServiceClient.getTickets(searchFilter).get(0);
3405 mandeep.dh 358
            ticket.setDescription(description);
359
            ticket.setPriority(TicketPriority.valueOf(priority));
360
 
361
            // Update when a ticket is closed!
3578 mandeep.dh 362
            if (TicketStatus.CLOSED.name().equals(status) || TicketCategory.COD_VERIFICATION.equals(ticket.getCategory())) {
3546 mandeep.dh 363
                if (TicketCategory.COD_VERIFICATION.equals(ticket.getCategory())
364
                        && pendingCODOrders(ticket.getCustomerId())) {
365
                    addActionMessage("Cod orders pending for verification. Ticket can not be closed and its category cannot be changed.");
366
                } else {
367
                    ticket.setCategory(TicketCategory.valueOf(category));
368
                    ticket.setStatus(TicketStatus.valueOf(status));
369
                    ticket.setCloseDate(new Date().getTime());
370
                }
3405 mandeep.dh 371
            }
3546 mandeep.dh 372
            else {
373
                ticket.setCategory(TicketCategory.valueOf(category));
3578 mandeep.dh 374
                ticket.setStatus(TicketStatus.valueOf(status));
3546 mandeep.dh 375
            }
3405 mandeep.dh 376
 
377
            if (activityDescription == null || activityDescription.isEmpty()) {
4241 anupam.sin 378
                activityDescription = "Ticket fields updated";
3405 mandeep.dh 379
            }
380
 
381
            Activity activity = new Activity();
382
            activity.setDescription(activityDescription);
383
            activity.setType(ActivityType.valueOf(activityType));
3546 mandeep.dh 384
            activity.setTicketPriority(ticket.getPriority());
385
            activity.setTicketStatus(ticket.getStatus());
3405 mandeep.dh 386
            activity.setCreatorId(creatorId);
3546 mandeep.dh 387
            activity.setTicketCategory(ticket.getCategory());
388
            activity.setTicketDescription(ticket.getDescription());
3405 mandeep.dh 389
 
390
            if (userId != null && !userId.isEmpty()) {
391
                activity.setCustomerId(Long.parseLong(userId));
392
            }
393
 
4035 mandeep.dh 394
            // Handling null values appropriately
395
            if (assigneeEmailId != null && !assigneeEmailId.isEmpty()) {
396
                long assigneeId = CRMAuthorizingRealm.getAgent(assigneeEmailId)
397
                        .getId();
398
                ticket.setAssigneeId(assigneeId);
399
                activity.setTicketAssigneeId(assigneeId);
400
            }
401
 
3405 mandeep.dh 402
            if (ActivityType.SEND_EMAIL_TO_CUSTOMER.equals(activity.getType())) {
403
                log.info("Sending mail");
404
                Client helperClient = new HelperClient().getClient();
405
                activity.setUserEmailId(helperClient.saveUserEmailForSending(
3546 mandeep.dh 406
                        customerEmailId, CRMConstants.CRM_EMAIL_SENDOR,
407
                        subject, body, null, CRMConstants.CRM_EMAIL_TYPE));
3405 mandeep.dh 408
 
4256 mandeep.dh 409
                String plainTextbody = new Source(body).getTextExtractor().toString();
410
 
3405 mandeep.dh 411
                // We change activityType to OTHER when pop up box for email
412
                // closes
413
                activity.setDescription("Subject: " + subject + "\n\n"
4256 mandeep.dh 414
                        + "Body: " + plainTextbody);
4206 mandeep.dh 415
 
416
                String activityDesc = activity.getDescription();
417
                if (activityDesc.length() > CRMConstants.DESCRIPTION_MAX_WIDTH) {
418
                    activityDesc = activityDesc.substring(0, CRMConstants.DESCRIPTION_MAX_WIDTH);
419
                    activityDesc += "\n\nTHIS TEXT IS TRUNCATED. PLEASE VISIT INBOX TO SEE COMPLETE DETAILS.";
420
                }
421
 
422
                activity.setDescription(activityDesc);
3405 mandeep.dh 423
            }
424
 
4020 mandeep.dh 425
            if (ActivityType.ESCALATE_TICKET.equals(activity.getType())) {
426
                log.info("Sending escalation mail");
427
                EscalationMatrix escalation = CRMConstants.EscalationMatrix.valueOf(escalate);
428
                List<Integer> escalationReceipients = escalation.getAgentIds();
429
 
430
                String toMailIds = "";
431
                for (Integer agentId : escalationReceipients) {
432
                    toMailIds += CRMAuthorizingRealm.getAgent(agentId).getEmailId() + ";";
4034 mandeep.dh 433
 
434
                    // Setting last agent as assignee
435
                    ticket.setAssigneeId(agentId);
436
                    activity.setTicketAssigneeId(agentId);
4020 mandeep.dh 437
                }
438
 
439
                Client helperClient = new HelperClient().getClient();
440
                String escalationMailSubject = createEscalationMailSubject(ticket, escalation);
441
                String escalationMailBody = createEscalationMailBody(ticket, escalation);
442
 
443
                activity.setUserEmailId(helperClient.saveUserEmailForSending(
444
                        toMailIds, CRMConstants.CRM_EMAIL_SENDOR,
445
                        escalationMailSubject, escalationMailBody,
446
                        null, CRMConstants.CRM_EMAIL_TYPE));
447
 
448
                // We change activityType to OTHER when pop up box for email
449
                // closes
450
                activity.setDescription("To: " + toMailIds + "\n\nSubject: " + escalationMailSubject + "\n\n"
451
                        + "Body: " + escalationMailBody);
452
            }
453
 
3405 mandeep.dh 454
            User user = null;
455
            userContextServiceClient = new UserClient().getClient();
456
            try {
457
                if (customerName != null && !customerName.isEmpty()) {
458
                    ticket.setCustomerName(customerName);
459
                    activity.setCustomerName(customerName);
460
                }
461
 
462
                if (customerEmailId != null && !customerEmailId.isEmpty()) {
463
                    ticket.setCustomerEmailId(customerEmailId);
464
                    activity.setCustomerEmailId(customerEmailId);
3546 mandeep.dh 465
                    user = userContextServiceClient
466
                            .getUserByEmail(customerEmailId);
3405 mandeep.dh 467
                }
468
 
3546 mandeep.dh 469
                if ((user == null || user.getUserId() == -1)
470
                        && customerMobileNumber != null
471
                        && !customerMobileNumber.isEmpty()) {
3405 mandeep.dh 472
                    ticket.setCustomerMobileNumber(customerMobileNumber);
473
                    activity.setCustomerMobileNumber(customerMobileNumber);
3546 mandeep.dh 474
                    user = userContextServiceClient.getUserByMobileNumber(Long
475
                            .parseLong(customerMobileNumber));
3405 mandeep.dh 476
                }
477
            } catch (UserContextException e) {
478
                log.error("Could not fetch user for: " + customerEmailId + " "
479
                        + customerMobileNumber + " " + customerName, e);
480
            }
3546 mandeep.dh 481
 
3405 mandeep.dh 482
            if (user != null && user.getUserId() != -1) {
483
                ticket.setCustomerId(user.getUserId());
484
                activity.setCustomerId(user.getUserId());
485
            }
486
 
487
            crmServiceClient = new CRMClient().getClient();
488
            crmServiceClient.updateTicket(ticket, activity);
489
        } catch (TException e) {
490
            log.error("Error while updating ticket", e);
491
            return EXCEPTION;
492
        } catch (HelperServiceException hse) {
493
            log.error("Error while sending mail", hse);
494
            return EXCEPTION;
495
        }
496
 
497
        return index();
498
    }
499
 
4020 mandeep.dh 500
    private String createEscalationMailBody(Ticket ticket,
501
            EscalationMatrix escalation)
502
    {
503
        return body + "<br />Please visit following URL to check ticket details.<br />" + 
504
            "http://cs.shop2020.in:8080/crm?ticketId=" + ticket.getId();
505
    }
506
 
507
    private String createEscalationMailSubject(Ticket ticket,
508
            EscalationMatrix escalation)
509
    {
510
        return CRMConstants.CRM_SUBJECT_PREFIX_FOR_TICKET_ID + ticket.getId() + " - ESCALATION FROM CRM - Type: " + escalation.name();
511
    }
512
 
3546 mandeep.dh 513
    private boolean pendingCODOrders(long customerId) {
514
        try {
515
            log.info("Trying to fetch orders for " + customerId);
516
            transactionServiceClient = new TransactionClient().getClient();
517
            for (Order order : transactionServiceClient.getOrdersForCustomer(
518
                    customerId, 0, 0,
519
                    Collections.singletonList(OrderStatus.INIT))) {
520
                log.info("Processing order: " + order.getId() + " with COD: " + order.isCod());
521
                if (order.isCod()) {
522
                    log.info("Returning true from pendingCODOrders() for " + customerId);
523
                    return true;
524
                }
525
            }
526
        } catch (TTransportException e) {
527
            log.error("Error while creating thrift client", e);
528
        } catch (TransactionServiceException e) {
529
            log.error("Error fetching orders", e);
530
        } catch (TException e) {
531
            log.error("Error fetching orders", e);
532
        }
533
 
534
        log.info("Returning false from pendingCODOrders() for " + customerId);
535
        return false;
536
    }
537
 
538
    public String updateOrderStatus() throws NumberFormatException,
539
            TransactionServiceException, TException {
540
        long creatorId = CRMAuthorizingRealm.getAgent(currentAgentEmailId)
541
                .getId();
542
 
3578 mandeep.dh 543
        OrderStatus orderStatusEnum = OrderStatus.valueOf(orderStatus);
3546 mandeep.dh 544
        transactionServiceClient = new TransactionClient().getClient();
545
 
3578 mandeep.dh 546
        if (OrderStatus.SUBMITTED_FOR_PROCESSING.equals(orderStatusEnum)) {
547
            transactionServiceClient.verifyOrder(Long.parseLong(orderId));
548
        }
549
        else if (OrderStatus.CANCELED.equals(orderStatusEnum)) {
4241 anupam.sin 550
            transactionServiceClient.refundOrder(Long.parseLong(orderId), currentAgentEmailId, cancelReason);
3578 mandeep.dh 551
        }
552
        else {
553
            throw new UnsupportedOperationException("Cannot update status of orderId: " + orderId + " to: " + orderStatus);
554
        }
555
 
3546 mandeep.dh 556
        SearchFilter searchFilter = new SearchFilter();
557
        searchFilter.setTicketId(Long.parseLong(id));
558
        crmServiceClient = new CRMClient().getClient();
559
        Ticket ticket = crmServiceClient.getTickets(searchFilter).get(0);
560
 
561
        // Inserting activity
562
        Activity activity = new Activity();
4241 anupam.sin 563
        activity.setDescription("Status updated for Order Id: " + orderId
564
                + " to " + orderStatus + ", Reason: " + cancelReason + body);
3546 mandeep.dh 565
        activity.setType(ActivityType.OTHER);
566
        activity.setTicketPriority(ticket.getPriority());
567
        activity.setTicketStatus(ticket.getStatus());
568
        activity.setCreatorId(creatorId);
569
        activity.setTicketCategory(ticket.getCategory());
570
        activity.setTicketDescription(ticket.getDescription());
571
        activity.setCustomerId(ticket.getCustomerId());
572
        activity.setTicketAssigneeId(ticket.getAssigneeId());
573
 
574
        crmServiceClient = new CRMClient().getClient();
575
        crmServiceClient.updateTicket(ticket, activity);
576
 
577
        return edit();
578
    }
579
 
3137 mandeep.dh 580
    public User getUser(Long userId) {
581
        User user = null;
582
 
583
        try {
3390 mandeep.dh 584
            userContextServiceClient = new UserClient().getClient();
3137 mandeep.dh 585
            user = userContextServiceClient.getUserById(userId);
586
        } catch (UserContextException e) {
587
            String errorString = "Could not fetch user for " + userId;
588
            log.error(errorString, e);
589
            addActionError(errorString);
590
        } catch (TException e) {
591
            String errorString = "Could not create client";
592
            log.error(errorString, e);
593
            addActionError(errorString);
594
        }
595
 
596
        return user;
597
    }
598
 
4020 mandeep.dh 599
    public EscalationMatrix[] getEscalationMatrix () {
600
        return CRMConstants.EscalationMatrix.values();
601
    }
602
 
4241 anupam.sin 603
    public CODCancelMatrix[] getCODCancelMatrix () {
604
        return CRMConstants.CODCancelMatrix.values();
605
    }
606
 
3546 mandeep.dh 607
    public String getAddress(Order order) {
608
        return ModelUtils.extractAddressFromOrder(order);
609
    }
610
 
611
    public String getProductName(LineItem lineItem) {
4008 mandeep.dh 612
        return ModelUtils.extractProductNameFromLineItem(lineItem) + " " + lineItem.getColor();
3546 mandeep.dh 613
    }
614
 
3405 mandeep.dh 615
    public ActivityType[] getActivityTypes() {
616
        return ActivityType.values();
617
    }
618
 
619
    public TicketStatus[] getTicketStatuses() {
620
        return TicketStatus.values();
621
    }
622
 
3390 mandeep.dh 623
    public Agent getAgent(long agentId) throws TException {
624
        return CRMAuthorizingRealm.getAgent(agentId);
3137 mandeep.dh 625
    }
626
 
3339 mandeep.dh 627
    public List<Agent> getAllAgents() {
3390 mandeep.dh 628
        return CRMAuthorizingRealm.getAgents();
3339 mandeep.dh 629
    }
630
 
631
    public TicketCategory[] getTicketCategories() {
632
        return TicketCategory.values();
633
    }
634
 
635
    public TicketPriority[] getTicketPriorities() {
636
        return TicketPriority.values();
637
    }
638
 
3137 mandeep.dh 639
    public List<Ticket> getTickets() {
640
        return tickets;
641
    }
642
 
643
    public void setTickets(List<Ticket> tickets) {
644
        this.tickets = tickets;
645
    }
3339 mandeep.dh 646
 
3405 mandeep.dh 647
    public String getCustomerEmailId() {
648
        return customerEmailId;
3339 mandeep.dh 649
    }
650
 
3405 mandeep.dh 651
    public void setCustomerEmailId(String customerEmailId) {
652
        this.customerEmailId = customerEmailId;
3339 mandeep.dh 653
    }
654
 
655
    public String getDescription() {
656
        return description;
657
    }
658
 
659
    public void setDescription(String description) {
660
        this.description = description;
661
    }
662
 
663
    public String getAssigneeEmailId() {
664
        return assigneeEmailId;
665
    }
666
 
667
    public void setAssigneeEmailId(String assigneeEmailId) {
668
        this.assigneeEmailId = assigneeEmailId;
669
    }
670
 
671
    public String getPriority() {
672
        return priority;
673
    }
674
 
675
    public void setPriority(String priority) {
676
        this.priority = priority;
677
    }
678
 
679
    public String getCategory() {
680
        return category;
681
    }
682
 
683
    public void setCategory(String category) {
684
        this.category = category;
685
    }
686
 
687
    public String getOrderId() {
688
        return orderId;
689
    }
690
 
691
    public void setOrderId(String orderId) {
692
        this.orderId = orderId;
693
    }
3397 mandeep.dh 694
 
695
    public String[] getAgentIds() {
696
        return agentIds;
697
    }
698
 
699
    public void setAgentIds(String[] agentIds) {
700
        this.agentIds = agentIds;
701
    }
702
 
703
    public String getStartTimestamp() {
704
        return startTimestamp;
705
    }
706
 
707
    public void setStartTimestamp(String startTimestamp) {
708
        this.startTimestamp = startTimestamp;
709
    }
710
 
711
    public String getEndTimestamp() {
712
        return endTimestamp;
713
    }
714
 
715
    public void setEndTimestamp(String endTimestamp) {
716
        this.endTimestamp = endTimestamp;
717
    }
3405 mandeep.dh 718
 
719
    public String getUserId() {
720
        return userId;
721
    }
722
 
723
    public void setUserId(String userId) {
724
        this.userId = userId;
725
    }
726
 
727
    public String getId() {
728
        return id;
729
    }
730
 
731
    public void setId(String id) {
732
        this.id = id;
733
    }
734
 
735
    public String getActivityDescription() {
736
        return activityDescription;
737
    }
738
 
739
    public void setActivityDescription(String activityDescription) {
740
        this.activityDescription = activityDescription;
741
    }
742
 
743
    public String getStatus() {
744
        return status;
745
    }
746
 
747
    public void setStatus(String status) {
748
        this.status = status;
749
    }
750
 
751
    public String getActivityType() {
752
        return activityType;
753
    }
754
 
755
    public void setActivityType(String activityType) {
756
        this.activityType = activityType;
757
    }
758
 
759
    public Ticket getTicket() {
760
        return ticket;
761
    }
762
 
763
    public void setTicket(Ticket ticket) {
764
        this.ticket = ticket;
765
    }
766
 
767
    public List<Activity> getActivities() {
768
        return activities;
769
    }
770
 
771
    public void setActivities(List<Activity> activities) {
772
        this.activities = activities;
773
    }
774
 
775
    public String getSubject() {
776
        return subject;
777
    }
778
 
779
    public void setSubject(String subject) {
780
        this.subject = subject;
781
    }
782
 
783
    public String getBody() {
784
        return body;
785
    }
786
 
787
    public void setBody(String body) {
788
        this.body = body;
789
    }
790
 
791
    public String getCustomerName() {
792
        return customerName;
793
    }
794
 
795
    public void setCustomerName(String customerName) {
796
        this.customerName = customerName;
797
    }
798
 
799
    public String getCustomerMobileNumber() {
800
        return customerMobileNumber;
801
    }
802
 
803
    public void setCustomerMobileNumber(String customerMobileNumber) {
804
        this.customerMobileNumber = customerMobileNumber;
805
    }
3546 mandeep.dh 806
 
807
    public User getUser() {
808
        return user;
809
    }
810
 
811
    public void setUser(User user) {
812
        this.user = user;
813
    }
814
 
815
    public String getOrderStatus() {
816
        return orderStatus;
817
    }
818
 
819
    public void setOrderStatus(String orderStatus) {
820
        this.orderStatus = orderStatus;
821
    }
822
 
823
    public List<Order> getOrders() {
824
        return orders;
825
    }
826
 
827
    public void setOrders(List<Order> orders) {
828
        this.orders = orders;
829
    }
4020 mandeep.dh 830
 
831
    public String getEscalate() {
832
        return escalate;
833
    }
834
 
835
    public void setEscalate(String escalate) {
836
        this.escalate = escalate;
837
    }
4241 anupam.sin 838
 
839
    public String getCancelReason() {
840
        return cancelReason;
841
    }
842
 
843
    public void setCancelReason(String cancelReason) {
844
        this.cancelReason = cancelReason;
845
    }
3137 mandeep.dh 846
}