Subversion Repositories SmartDukaan

Rev

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