Subversion Repositories SmartDukaan

Rev

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