Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
2674 vikas 1
package in.shop2020.serving.controllers;
2
 
3090 mandeep.dh 3
import in.shop2020.crm.Activity;
4142 mandeep.dh 4
import in.shop2020.crm.ActivityType;
3397 mandeep.dh 5
import in.shop2020.crm.Agent;
3390 mandeep.dh 6
import in.shop2020.crm.SearchFilter;
3090 mandeep.dh 7
import in.shop2020.crm.Ticket;
3499 mandeep.dh 8
import in.shop2020.crm.TicketCategory;
3090 mandeep.dh 9
import in.shop2020.crm.TicketStatus;
2724 vikas 10
import in.shop2020.model.v1.order.Order;
11
import in.shop2020.model.v1.order.OrderStatus;
3090 mandeep.dh 12
import in.shop2020.model.v1.order.TransactionServiceException;
2724 vikas 13
import in.shop2020.model.v1.user.Cart;
14
import in.shop2020.model.v1.user.Line;
15
import in.shop2020.model.v1.user.User;
3090 mandeep.dh 16
import in.shop2020.model.v1.user.UserCommunication;
17
import in.shop2020.model.v1.user.UserCommunicationException;
18
import in.shop2020.model.v1.user.UserContextException;
19
import in.shop2020.model.v1.user.UserState;
3390 mandeep.dh 20
import in.shop2020.serving.auth.CRMAuthorizingRealm;
21
import in.shop2020.thrift.clients.CRMClient;
22
import in.shop2020.thrift.clients.TransactionClient;
23
import in.shop2020.thrift.clients.UserClient;
3269 mandeep.dh 24
import in.shop2020.util.CRMConstants;
2674 vikas 25
 
3546 mandeep.dh 26
import java.util.ArrayList;
3397 mandeep.dh 27
import java.util.Calendar;
3390 mandeep.dh 28
import java.util.Collections;
2724 vikas 29
import java.util.Date;
30
import java.util.List;
31
 
2674 vikas 32
import org.apache.log4j.Logger;
33
import org.apache.struts2.convention.annotation.Action;
3090 mandeep.dh 34
import org.apache.thrift.TException;
2674 vikas 35
 
36
/**
37
 * @author vikas
3422 mandeep.dh 38
 * 
2674 vikas 39
 */
40
@SuppressWarnings("serial")
41
public class HomeController extends BaseController {
3422 mandeep.dh 42
    private static final Logger log        = Logger.getLogger(HomeController.class);
3090 mandeep.dh 43
 
3422 mandeep.dh 44
    private String              email;
45
    private String              orderId;
46
    private String              mobileNumber;
47
    private User                user;
48
    private long                orderCount;
49
    private long                completedOrderCount;
50
    private long                openOrderCount;
51
    private long                failedOrderCount;
52
    private long                userCommunicationCount;
53
    private long                ticketCount;
54
    private long                openTicketCount;
55
    private long                closedTicketCount;
56
    private String              ticketId;
57
    private String              lastLogin;
58
    private double              cartItems;
59
    private String              couponCode = "";
60
    private long                agentOpenTicketCount;
61
    private long                unassignedTicketCount;
62
    private long                activityCount;
63
    private long                customerActivityCount;
3499 mandeep.dh 64
    private long                pendingCodVerificationCount;
3711 mandeep.dh 65
    private long                agentUnreadActivityCount;
3578 mandeep.dh 66
    private long                openFailedPaymentsTicketCount;
4008 mandeep.dh 67
    private long                openDelayedDeliveryTicketCount;
4267 anupam.sin 68
    private long                openFlaggedPaymentsTicketCount;
4490 anupam.sin 69
    private long                DoaRequestCount;
2674 vikas 70
 
4490 anupam.sin 71
    private long                ReturnRequestCount;
72
 
4751 anupam.sin 73
    private long                orderCancellationCount;
74
 
75
 
2674 vikas 76
    @Action("/")
2724 vikas 77
    public String index() throws Exception {
3137 mandeep.dh 78
        String returnValue = INPUT;
79
 
3090 mandeep.dh 80
        try {
3106 mandeep.dh 81
            if (email == null) {
3390 mandeep.dh 82
                loadTicketCounts();
83
                loadCustomerActivities();
3137 mandeep.dh 84
                return returnValue;
3106 mandeep.dh 85
            }
86
 
3390 mandeep.dh 87
            userContextServiceClient = new UserClient().getClient();
3096 mandeep.dh 88
            if (email != null && !email.isEmpty()) {
89
                user = userContextServiceClient.getUserByEmail(email);
3422 mandeep.dh 90
            } else if (mobileNumber != null && !mobileNumber.isEmpty()) {
91
                user = userContextServiceClient.getUserByMobileNumber(Long
92
                        .parseLong(mobileNumber));
93
            } else if (orderId != null && !orderId.isEmpty()) {
3390 mandeep.dh 94
                transactionServiceClient = new TransactionClient().getClient();
3422 mandeep.dh 95
                Order order = transactionServiceClient.getOrder(Long
96
                        .parseLong(orderId));
97
                user = userContextServiceClient.getUserById(order
98
                        .getCustomer_id());
99
            } else if (ticketId != null && !ticketId.isEmpty()) {
3390 mandeep.dh 100
                SearchFilter searchFilter = new SearchFilter();
101
                searchFilter.setTicketId(Long.parseLong(ticketId));
3422 mandeep.dh 102
                crmServiceClient = new CRMClient().getClient();
103
                List<Ticket> tickets = crmServiceClient
104
                        .getTickets(searchFilter);
3390 mandeep.dh 105
                if (!tickets.isEmpty()) {
106
                    Ticket ticket = tickets.get(0);
107
                    if (ticket.isSetCustomerId()) {
108
                        user = userContextServiceClient.getUserById(ticket.getCustomerId());
109
                    }
110
                }
3422 mandeep.dh 111
                else {
112
                    // resetting in case on invalid ticket Id
113
                    ticketId = null;
114
                }
3096 mandeep.dh 115
            }
3090 mandeep.dh 116
 
117
            if (user == null || user.getUserId() <= 0) {
3422 mandeep.dh 118
                if (ticketId == null || ticketId.isEmpty()) {
119
                    addActionError("Invalid input");
120
                }
121
            } else {
3390 mandeep.dh 122
                loadUserCommunicationDetails();
123
                loadOrderDetails();
124
                loadCartDetails();
125
                loadTicketDetails();
126
                loadActivityDetails();
3137 mandeep.dh 127
                returnValue = INDEX;
128
            }
3422 mandeep.dh 129
        } catch (Exception e) {
3137 mandeep.dh 130
            addActionError("Invalid input");
3090 mandeep.dh 131
            log.error("Error occurred", e);
2724 vikas 132
        }
3137 mandeep.dh 133
 
134
        if (INPUT.equals(returnValue)) {
3390 mandeep.dh 135
            loadTicketCounts();
3422 mandeep.dh 136
            loadCustomerActivities();
3137 mandeep.dh 137
        }
138
 
139
        return returnValue;
3090 mandeep.dh 140
    }
141
 
3390 mandeep.dh 142
    private void loadCustomerActivities() throws TException {
143
        SearchFilter searchFilter = new SearchFilter();
3422 mandeep.dh 144
        searchFilter.setActivityCreatorIds(Collections
145
                .singletonList(CRMConstants.ADMIN_AGENT_ID));
3390 mandeep.dh 146
        searchFilter.setIsActivityRead(false);
147
 
3711 mandeep.dh 148
        agentUnreadActivityCount = 0;
149
        customerActivityCount = 0;
150
 
3422 mandeep.dh 151
        crmServiceClient = new CRMClient().getClient();
3711 mandeep.dh 152
        List<Activity> activities = crmServiceClient.getActivities(searchFilter);
153
 
3339 mandeep.dh 154
        if (activities != null) {
3711 mandeep.dh 155
            for (Activity activity : activities) {
156
                if (CRMAuthorizingRealm.getAgent(currentAgentEmailId).getId() == activity.getTicketAssigneeId()) {
157
                    agentUnreadActivityCount++;
158
                }
159
            }
160
 
3339 mandeep.dh 161
            customerActivityCount = activities.size();
162
        }
163
    }
164
 
3390 mandeep.dh 165
    private void loadActivityDetails() throws TException {
166
        SearchFilter searchFilter = new SearchFilter();
167
        searchFilter.setCustomerId(user.getUserId());
168
 
3422 mandeep.dh 169
        crmServiceClient = new CRMClient().getClient();
170
        List<Activity> activities = crmServiceClient
171
                .getActivities(searchFilter);
3106 mandeep.dh 172
        if (activities != null) {
173
            activityCount = activities.size();
174
        }
175
    }
176
 
3390 mandeep.dh 177
    private void loadTicketCounts() throws TException {
178
        SearchFilter searchFilter = new SearchFilter();
3546 mandeep.dh 179
        searchFilter.setTicketStatuses(new ArrayList<TicketStatus>());
180
        searchFilter.getTicketStatuses().add(TicketStatus.OPEN);
181
        searchFilter.getTicketStatuses().add(TicketStatus.REOPEN);
3422 mandeep.dh 182
        searchFilter.setTicketAssigneeIds(Collections
3499 mandeep.dh 183
                .singletonList(CRMAuthorizingRealm.getAgent(currentAgentEmailId).getId()));
3390 mandeep.dh 184
 
3422 mandeep.dh 185
        crmServiceClient = new CRMClient().getClient();
3499 mandeep.dh 186
        agentOpenTicketCount = crmServiceClient.getTickets(searchFilter).size();
187
        unassignedTicketCount = crmServiceClient.getUnassignedTickets().size();
3390 mandeep.dh 188
 
3578 mandeep.dh 189
        if (canVerifyCOD()) {
190
            searchFilter = new SearchFilter();
191
            searchFilter.setTicketCategory(TicketCategory.COD_VERIFICATION);
192
            searchFilter.setTicketStatuses(new ArrayList<TicketStatus>());
193
            searchFilter.getTicketStatuses().add(TicketStatus.OPEN);
194
            searchFilter.getTicketStatuses().add(TicketStatus.REOPEN);
3546 mandeep.dh 195
 
3578 mandeep.dh 196
            crmServiceClient = new CRMClient().getClient();
197
            pendingCodVerificationCount = crmServiceClient.getTickets(searchFilter).size();            
198
        }
199
 
200
        if (canViewFailedPayments()) {
201
            searchFilter = new SearchFilter();
202
            searchFilter.setTicketStatuses(new ArrayList<TicketStatus>());
203
            searchFilter.getTicketStatuses().add(TicketStatus.OPEN);
204
            searchFilter.getTicketStatuses().add(TicketStatus.REOPEN);
205
            searchFilter.setTicketCategory(TicketCategory.FAILED_PAYMENTS);
206
            crmServiceClient = new CRMClient().getClient();
207
            openFailedPaymentsTicketCount = crmServiceClient.getTickets(searchFilter).size();
208
        }
4008 mandeep.dh 209
 
210
        if (canViewDelayedDeliveries()) {
211
            searchFilter = new SearchFilter();
212
            searchFilter.setTicketStatuses(new ArrayList<TicketStatus>());
213
            searchFilter.getTicketStatuses().add(TicketStatus.OPEN);
214
            searchFilter.getTicketStatuses().add(TicketStatus.REOPEN);
215
            searchFilter.setTicketCategory(TicketCategory.DELAYED_DELIVERY);
216
            crmServiceClient = new CRMClient().getClient();
217
            openDelayedDeliveryTicketCount = crmServiceClient.getTickets(searchFilter).size();
218
        }
4267 anupam.sin 219
 
220
        if (canViewFlaggedPayments()) {
221
            searchFilter = new SearchFilter();
222
            searchFilter.setTicketStatuses(new ArrayList<TicketStatus>());
223
            searchFilter.getTicketStatuses().add(TicketStatus.OPEN);
224
            searchFilter.getTicketStatuses().add(TicketStatus.REOPEN);
225
            searchFilter.setTicketCategory(TicketCategory.PAYMENT_FLAGGED);
226
            crmServiceClient = new CRMClient().getClient();
227
            openFlaggedPaymentsTicketCount = crmServiceClient.getTickets(searchFilter).size();
228
        }
4490 anupam.sin 229
 
230
        if (canViewDoaRequests()) {
231
            searchFilter = new SearchFilter();
232
            searchFilter.setTicketStatuses(new ArrayList<TicketStatus>());
233
            searchFilter.getTicketStatuses().add(TicketStatus.OPEN);
234
            searchFilter.getTicketStatuses().add(TicketStatus.REOPEN);
235
            searchFilter.setTicketCategory(TicketCategory.DOA_RECEIVED);
236
            crmServiceClient = new CRMClient().getClient();
237
            DoaRequestCount = crmServiceClient.getTickets(searchFilter).size();
238
        }
239
 
240
        if (canViewReturnRequests()) {
241
            searchFilter = new SearchFilter();
242
            searchFilter.setTicketStatuses(new ArrayList<TicketStatus>());
243
            searchFilter.getTicketStatuses().add(TicketStatus.OPEN);
244
            searchFilter.getTicketStatuses().add(TicketStatus.REOPEN);
245
            searchFilter.setTicketCategory(TicketCategory.RETURN_FORM);
246
            crmServiceClient = new CRMClient().getClient();
247
            ReturnRequestCount = crmServiceClient.getTickets(searchFilter).size();
248
        }
4751 anupam.sin 249
 
250
        if (canViewOrderCancellation()) {
251
            searchFilter = new SearchFilter();
252
            searchFilter.setTicketStatuses(new ArrayList<TicketStatus>());
253
            searchFilter.getTicketStatuses().add(TicketStatus.OPEN);
254
            searchFilter.getTicketStatuses().add(TicketStatus.REOPEN);
255
            searchFilter.setTicketCategory(TicketCategory.ORDER_CANCELLATION);
256
            crmServiceClient = new CRMClient().getClient();
257
            orderCancellationCount = crmServiceClient.getTickets(searchFilter).size();
258
        }
3106 mandeep.dh 259
    }
260
 
3390 mandeep.dh 261
    private void loadUserCommunicationDetails()
3090 mandeep.dh 262
            throws UserCommunicationException, TException {
3390 mandeep.dh 263
        userContextServiceClient = new UserClient().getClient();
3422 mandeep.dh 264
        List<UserCommunication> userCommunication = userContextServiceClient
265
                .getUserCommunicationByUser(user.getUserId());
3090 mandeep.dh 266
        userCommunicationCount = userCommunication.size();
267
    }
268
 
3422 mandeep.dh 269
    private void loadOrderDetails() throws TransactionServiceException,
270
            TException {
3390 mandeep.dh 271
        transactionServiceClient = new TransactionClient().getClient();
3422 mandeep.dh 272
        List<Order> allOrders = transactionServiceClient.getOrdersForCustomer(
273
                user.getUserId(), 0, (new Date()).getTime(), null);
2724 vikas 274
        orderCount = allOrders.size();
3090 mandeep.dh 275
 
2724 vikas 276
        for (Order o : allOrders) {
277
            if (o.getStatus() == OrderStatus.DELIVERY_SUCCESS) {
278
                completedOrderCount++;
3422 mandeep.dh 279
            } else if (CRMConstants.failedStatusList.contains(o.getStatus())) {
2724 vikas 280
                failedOrderCount++;
3422 mandeep.dh 281
            } else {
2724 vikas 282
                openOrderCount++;
283
            }
284
        }
3090 mandeep.dh 285
    }
286
 
3422 mandeep.dh 287
    private void loadCartDetails() throws UserContextException, TException {
3390 mandeep.dh 288
        userContextServiceClient = new UserClient().getClient();
3422 mandeep.dh 289
        UserState userState = userContextServiceClient.getUserState(user
290
                .getUserId());
4142 mandeep.dh 291
        lastLogin = new Date(userState.getLastLogin()).toString();
3090 mandeep.dh 292
        Cart cart = null;
293
 
2724 vikas 294
        try {
3090 mandeep.dh 295
            cart = userContextServiceClient.getCurrentCart(user.getUserId());
2724 vikas 296
            if (cart.getCouponCode() != null) {
297
                couponCode = cart.getCouponCode();
298
            }
299
            for (Line line : cart.getLines()) {
300
                cartItems += line.getQuantity();
301
            }
302
        } catch (Exception e) {
303
            log.warn("No cart assigned for this user", e);
304
        }
2674 vikas 305
    }
2724 vikas 306
 
3390 mandeep.dh 307
    private void loadTicketDetails() throws TException {
3090 mandeep.dh 308
        // Fetching tickets' info
309
        ticketCount = 0;
310
        openTicketCount = 0;
311
        closedTicketCount = 0;
312
 
3422 mandeep.dh 313
        crmServiceClient = new CRMClient().getClient();
3390 mandeep.dh 314
        SearchFilter searchFilter = new SearchFilter();
315
        searchFilter.setCustomerId(user.getUserId());
316
 
317
        List<Ticket> tickets = crmServiceClient.getTickets(searchFilter);
3422 mandeep.dh 318
        if (tickets != null) {
3090 mandeep.dh 319
            for (Ticket ticket : tickets) {
320
                ticketCount++;
3106 mandeep.dh 321
                if (!ticket.getStatus().equals(TicketStatus.CLOSED)) {
3090 mandeep.dh 322
                    openTicketCount++;
3422 mandeep.dh 323
                } else {
3090 mandeep.dh 324
                    closedTicketCount++;
325
                }
326
            }
327
        }
328
    }
329
 
3397 mandeep.dh 330
    public String getToday() {
331
        return SDF.format(new Date());
332
    }
333
 
334
    public String getYesterday() {
335
        Calendar calendar = Calendar.getInstance();
336
        calendar.setTime(new Date());
337
        calendar.add(Calendar.DAY_OF_MONTH, -1);
338
        return SDF.format(calendar.getTime());
339
    }
340
 
341
    public List<Agent> getAllAgents() {
342
        return CRMAuthorizingRealm.getAgents();
343
    }
344
 
4142 mandeep.dh 345
    public ActivityType[] getActivityTypes() {
346
        return ActivityType.values();
347
    }
348
 
349
    public TicketCategory[] getTicketCategories() {
350
        return TicketCategory.values();
351
    }
352
 
2724 vikas 353
    public void setEmail(String email) {
354
        this.email = email;
355
    }
356
 
357
    public String getEmail() {
358
        return email;
359
    }
360
 
361
    public void setOrderId(String orderId) {
3390 mandeep.dh 362
        this.orderId = orderId;
2724 vikas 363
    }
364
 
3390 mandeep.dh 365
    public String getOrderId() {
2724 vikas 366
        return orderId;
367
    }
3422 mandeep.dh 368
 
2724 vikas 369
    public User getUser() {
370
        return user;
371
    }
3422 mandeep.dh 372
 
2724 vikas 373
    public long getOrderCount() {
374
        return orderCount;
375
    }
3422 mandeep.dh 376
 
2724 vikas 377
    public long getCompletedOrderCount() {
378
        return completedOrderCount;
379
    }
3422 mandeep.dh 380
 
2724 vikas 381
    public long getOpenOrderCount() {
382
        return openOrderCount;
383
    }
3422 mandeep.dh 384
 
2724 vikas 385
    public long getFailedOrderCount() {
386
        return failedOrderCount;
387
    }
3422 mandeep.dh 388
 
3499 mandeep.dh 389
    public int getCartItems() {
390
        return (int)cartItems;
2724 vikas 391
    }
3422 mandeep.dh 392
 
2724 vikas 393
    public String getLastLogin() {
394
        return lastLogin;
395
    }
396
 
397
    public String getCouponCode() {
398
        return couponCode;
399
    }
2830 vikas 400
 
401
    public long getUserCommunicationCount() {
402
        return userCommunicationCount;
403
    }
3090 mandeep.dh 404
 
405
    public long getTicketCount() {
406
        return ticketCount;
407
    }
408
 
409
    public long getOpenTicketCount() {
410
        return openTicketCount;
411
    }
412
 
413
    public long getClosedTicketCount() {
414
        return closedTicketCount;
415
    }
416
 
417
    public void setMobileNumber(String mobileNumber) {
418
        this.mobileNumber = mobileNumber;
419
    }
3096 mandeep.dh 420
 
421
    public String getTicketId() {
422
        return ticketId;
423
    }
424
 
425
    public void setTicketId(String ticketId) {
426
        this.ticketId = ticketId;
427
    }
3106 mandeep.dh 428
 
429
    public long getAgentOpenTicketCount() {
430
        return agentOpenTicketCount;
431
    }
432
 
433
    public long getUnassignedTicketCount() {
434
        return unassignedTicketCount;
435
    }
436
 
437
    public long getActivityCount() {
438
        return activityCount;
439
    }
440
 
441
    public void setActivityCount(long activityCount) {
442
        this.activityCount = activityCount;
443
    }
3339 mandeep.dh 444
 
445
    public long getCustomerActivityCount() {
446
        return customerActivityCount;
447
    }
448
 
449
    public void setCustomerActivityCount(long customerActivityCount) {
450
        this.customerActivityCount = customerActivityCount;
451
    }
3499 mandeep.dh 452
 
453
    public long getPendingCodVerificationCount() {
454
        return pendingCodVerificationCount;
455
    }
456
 
457
    public void setPendingCodVerificationCount(long pendingCodVerificationCount) {
458
        this.pendingCodVerificationCount = pendingCodVerificationCount;
459
    }
3578 mandeep.dh 460
 
461
    public long getOpenFailedPaymentsTicketCount() {
462
        return openFailedPaymentsTicketCount;
463
    }
464
 
465
    public void setOpenFailedPaymentsTicketCount(long openFailedPaymentsTicketCount) {
466
        this.openFailedPaymentsTicketCount = openFailedPaymentsTicketCount;
467
    }
3711 mandeep.dh 468
 
469
    public long getAgentUnreadActivityCount() {
470
        return agentUnreadActivityCount;
471
    }
472
 
473
    public void setAgentUnreadActivityCount(long agentUnreadActivityCount) {
474
        this.agentUnreadActivityCount = agentUnreadActivityCount;
475
    }
4008 mandeep.dh 476
 
477
    public long getOpenDelayedDeliveryTicketCount() {
478
        return openDelayedDeliveryTicketCount;
479
    }
480
 
481
    public void setOpenDelayedDeliveryTicketCount(
482
            long openDelayedDeliveryTicketCount) {
483
        this.openDelayedDeliveryTicketCount = openDelayedDeliveryTicketCount;
484
    }
4267 anupam.sin 485
 
486
    public long getOpenFlaggedPaymentsTicketCount() {
487
        return openFlaggedPaymentsTicketCount;
488
    }
489
 
490
    public void setOpenFlaggedPaymentsTicketCount(
491
            long openFlaggedPaymentsTicketCount) {
492
        this.openFlaggedPaymentsTicketCount = openFlaggedPaymentsTicketCount;
493
    }
4490 anupam.sin 494
 
495
    public long getDoaRequestCount() {
496
        return DoaRequestCount;
497
    }
498
 
499
    public void setDoaRequestCount(long DoaRequestCount) {
500
        this.DoaRequestCount = DoaRequestCount;
501
    }
502
 
503
    public long getReturnRequestCount() {
504
        return ReturnRequestCount;
505
    }
506
 
507
    public void setReturnRequestCount(long returnRequestCount) {
508
        ReturnRequestCount = returnRequestCount;
509
    }
4751 anupam.sin 510
 
511
    public long getOrderCancellationCount() {
512
        return orderCancellationCount;
513
    }
514
 
515
    public void setOrderCancellationCount(long orderCancellationCount) {
516
        this.orderCancellationCount = orderCancellationCount;
517
    }
2724 vikas 518
}