Subversion Repositories SmartDukaan

Rev

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