Subversion Repositories SmartDukaan

Rev

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