Subversion Repositories SmartDukaan

Rev

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