Subversion Repositories SmartDukaan

Rev

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