Subversion Repositories SmartDukaan

Rev

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