Subversion Repositories SmartDukaan

Rev

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