Subversion Repositories SmartDukaan

Rev

Rev 3390 | Rev 3422 | 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;
7
import in.shop2020.crm.TicketStatus;
2724 vikas 8
import in.shop2020.model.v1.order.Order;
9
import in.shop2020.model.v1.order.OrderStatus;
3090 mandeep.dh 10
import in.shop2020.model.v1.order.TransactionServiceException;
2724 vikas 11
import in.shop2020.model.v1.user.Cart;
12
import in.shop2020.model.v1.user.Line;
13
import in.shop2020.model.v1.user.User;
3090 mandeep.dh 14
import in.shop2020.model.v1.user.UserCommunication;
15
import in.shop2020.model.v1.user.UserCommunicationException;
16
import in.shop2020.model.v1.user.UserContextException;
17
import in.shop2020.model.v1.user.UserState;
3390 mandeep.dh 18
import in.shop2020.serving.auth.CRMAuthorizingRealm;
19
import in.shop2020.thrift.clients.CRMClient;
20
import in.shop2020.thrift.clients.TransactionClient;
21
import in.shop2020.thrift.clients.UserClient;
3269 mandeep.dh 22
import in.shop2020.util.CRMConstants;
2674 vikas 23
 
3397 mandeep.dh 24
import java.util.Calendar;
3390 mandeep.dh 25
import java.util.Collections;
2724 vikas 26
import java.util.Date;
27
import java.util.List;
28
 
2674 vikas 29
import org.apache.log4j.Logger;
30
import org.apache.struts2.convention.annotation.Action;
3090 mandeep.dh 31
import org.apache.thrift.TException;
2674 vikas 32
 
33
/**
34
 * @author vikas
35
 *
36
 */
37
@SuppressWarnings("serial")
38
public class HomeController extends BaseController {
3090 mandeep.dh 39
    private static final Logger log = Logger.getLogger(HomeController.class);
40
 
2724 vikas 41
    private String email;
3390 mandeep.dh 42
    private String orderId;
3090 mandeep.dh 43
    private String mobileNumber;
2724 vikas 44
    private User user;
45
    private long orderCount;
46
    private long completedOrderCount;
47
    private long openOrderCount;
48
    private long failedOrderCount;
2830 vikas 49
    private long userCommunicationCount;
3090 mandeep.dh 50
    private long ticketCount;
51
    private long openTicketCount;
52
    private long closedTicketCount;
3096 mandeep.dh 53
    private String ticketId;
2724 vikas 54
    private String lastLogin;
55
    private double cartItems;
56
    private String couponCode = "";
3106 mandeep.dh 57
    private long agentTicketCount;
58
    private long agentOpenTicketCount;
59
    private long unassignedTicketCount;
60
    private long allTicketCount;
61
    private long allOpenTicketCount;
62
    private long activityCount;
3339 mandeep.dh 63
    private long customerActivityCount;
2674 vikas 64
 
65
    @Action("/")
2724 vikas 66
    public String index() throws Exception {
3137 mandeep.dh 67
        String returnValue = INPUT;
68
 
3090 mandeep.dh 69
        try {
3106 mandeep.dh 70
            if (email == null) {
3390 mandeep.dh 71
                loadTicketCounts();
72
                loadCustomerActivities();
3137 mandeep.dh 73
                return returnValue;
3106 mandeep.dh 74
            }
75
 
3390 mandeep.dh 76
            userContextServiceClient = new UserClient().getClient();
3096 mandeep.dh 77
            if (email != null && !email.isEmpty()) {
78
                user = userContextServiceClient.getUserByEmail(email);
3090 mandeep.dh 79
            }
3096 mandeep.dh 80
            else if (mobileNumber != null && !mobileNumber.isEmpty()) {
81
                user = userContextServiceClient.getUserByMobileNumber(Long.parseLong(mobileNumber));
2724 vikas 82
            }
3390 mandeep.dh 83
            else if (orderId != null && !orderId.isEmpty()) {
84
                transactionServiceClient = new TransactionClient().getClient();
85
                Order order = transactionServiceClient.getOrder(Long.parseLong(orderId));
3096 mandeep.dh 86
                user = userContextServiceClient.getUserById(order.getCustomer_id());
2724 vikas 87
            }
3096 mandeep.dh 88
            else if (ticketId != null && !ticketId.isEmpty()) {
3390 mandeep.dh 89
                SearchFilter searchFilter = new SearchFilter();
90
                searchFilter.setTicketId(Long.parseLong(ticketId));
91
                crmServiceClient         = new CRMClient().getClient();
92
                List<Ticket> tickets = crmServiceClient.getTickets(searchFilter);
93
                if (!tickets.isEmpty()) {
94
                    Ticket ticket = tickets.get(0);
95
                    if (ticket.isSetCustomerId()) {
96
                        user = userContextServiceClient.getUserById(ticket.getCustomerId());
97
                    }
98
                    else {
99
                        // TODO support unregistered users!
100
                    }
101
                }
3096 mandeep.dh 102
            }
3090 mandeep.dh 103
 
104
            if (user == null || user.getUserId() <= 0) {
105
                addActionError("Invalid Input");
106
            }
3137 mandeep.dh 107
            else {
3390 mandeep.dh 108
                loadUserCommunicationDetails();
109
                loadOrderDetails();
110
                loadCartDetails();
111
                loadTicketDetails();
112
                loadActivityDetails();
3137 mandeep.dh 113
                returnValue = INDEX;
114
            }
2724 vikas 115
        }
3090 mandeep.dh 116
        catch (Exception e) {
3137 mandeep.dh 117
            addActionError("Invalid input");
3090 mandeep.dh 118
            log.error("Error occurred", e);
2724 vikas 119
        }
3137 mandeep.dh 120
 
121
        if (INPUT.equals(returnValue)) {
3390 mandeep.dh 122
            loadTicketCounts();
3137 mandeep.dh 123
        }
124
 
125
        return returnValue;
3090 mandeep.dh 126
    }
127
 
3390 mandeep.dh 128
    private void loadCustomerActivities() throws TException {
129
        SearchFilter searchFilter = new SearchFilter();
130
        searchFilter.setActivityCreatorIds(Collections.singletonList(CRMConstants.ADMIN_AGENT_ID));
131
        searchFilter.setIsActivityRead(false);
132
 
133
        crmServiceClient         = new CRMClient().getClient();
134
        List<Activity> activities = crmServiceClient.getActivities(searchFilter);
3339 mandeep.dh 135
        if (activities != null) {
136
            customerActivityCount = activities.size();
137
        }
138
    }
139
 
3390 mandeep.dh 140
    private void loadActivityDetails() throws TException {
141
        SearchFilter searchFilter = new SearchFilter();
142
        searchFilter.setCustomerId(user.getUserId());
143
 
144
        crmServiceClient         = new CRMClient().getClient();
145
        List<Activity> activities = crmServiceClient.getActivities(searchFilter);
3106 mandeep.dh 146
        if (activities != null) {
147
            activityCount = activities.size();
148
        }
149
    }
150
 
3390 mandeep.dh 151
    private void loadTicketCounts() throws TException {
152
        SearchFilter searchFilter = new SearchFilter();
153
        searchFilter.setTicketAssigneeIds(Collections.singletonList(CRMAuthorizingRealm.getAgent(currentAgentEmailId).getId()));
154
 
155
        crmServiceClient         = new CRMClient().getClient();
156
        List<Ticket> tickets = crmServiceClient.getTickets(searchFilter);
3137 mandeep.dh 157
        agentTicketCount = tickets.size();
158
        for (Ticket ticket : tickets) {
159
            if (TicketStatus.OPEN.equals(ticket.getStatus())) {
160
                agentOpenTicketCount++;
161
            }
162
        }
3390 mandeep.dh 163
 
3137 mandeep.dh 164
        List<Ticket> unassignedTickets = crmServiceClient.getUnassignedTickets();
165
        unassignedTicketCount = unassignedTickets.size();
166
 
3390 mandeep.dh 167
        List<Ticket> allTickets = tickets;
3137 mandeep.dh 168
        allTicketCount = allTickets.size();
169
        for (Ticket ticket : allTickets) {
170
            if (TicketStatus.OPEN.equals(ticket.getStatus())) {
171
                allOpenTicketCount++;
172
            }
173
        }
3106 mandeep.dh 174
    }
175
 
3390 mandeep.dh 176
    private void loadUserCommunicationDetails()
3090 mandeep.dh 177
            throws UserCommunicationException, TException {
3390 mandeep.dh 178
        userContextServiceClient = new UserClient().getClient();
3090 mandeep.dh 179
        List<UserCommunication> userCommunication = userContextServiceClient.getUserCommunicationByUser(user.getUserId());
180
        userCommunicationCount = userCommunication.size();
181
    }
182
 
3390 mandeep.dh 183
    private void loadOrderDetails()
3090 mandeep.dh 184
            throws TransactionServiceException, TException {
3390 mandeep.dh 185
        transactionServiceClient = new TransactionClient().getClient();
3090 mandeep.dh 186
        List<Order> allOrders = transactionServiceClient.getOrdersForCustomer(user.getUserId(), 0, (new Date()).getTime(), null);
2724 vikas 187
        orderCount = allOrders.size();
3090 mandeep.dh 188
 
2724 vikas 189
        for (Order o : allOrders) {
190
            if (o.getStatus() == OrderStatus.DELIVERY_SUCCESS) {
191
                completedOrderCount++;
192
            }
3269 mandeep.dh 193
            else if (CRMConstants.failedStatusList.contains(o.getStatus())) {
2724 vikas 194
                failedOrderCount++;
195
            }
196
            else {
197
                openOrderCount++;
198
            }
199
        }
3090 mandeep.dh 200
    }
201
 
3390 mandeep.dh 202
    private void loadCartDetails()
3090 mandeep.dh 203
            throws UserContextException, TException {
3390 mandeep.dh 204
        userContextServiceClient = new UserClient().getClient();
3090 mandeep.dh 205
        UserState userState = userContextServiceClient.getUserState(user.getUserId());
3390 mandeep.dh 206
        lastLogin = SDF.format(new Date(userState.getLastLogin()));
3090 mandeep.dh 207
        Cart cart = null;
208
 
2724 vikas 209
        try {
3090 mandeep.dh 210
            cart = userContextServiceClient.getCurrentCart(user.getUserId());
2724 vikas 211
            if (cart.getCouponCode() != null) {
212
                couponCode = cart.getCouponCode();
213
            }
214
            for (Line line : cart.getLines()) {
215
                cartItems += line.getQuantity();
216
            }
217
        } catch (Exception e) {
218
            log.warn("No cart assigned for this user", e);
219
        }
2674 vikas 220
    }
2724 vikas 221
 
3390 mandeep.dh 222
    private void loadTicketDetails() throws TException {
3090 mandeep.dh 223
        // Fetching tickets' info
224
        ticketCount = 0;
225
        openTicketCount = 0;
226
        closedTicketCount = 0;
227
 
3390 mandeep.dh 228
        crmServiceClient         = new CRMClient().getClient();
229
        SearchFilter searchFilter = new SearchFilter();
230
        searchFilter.setCustomerId(user.getUserId());
231
 
232
        List<Ticket> tickets = crmServiceClient.getTickets(searchFilter);
3090 mandeep.dh 233
        if (tickets != null) 
234
        {
235
            for (Ticket ticket : tickets) {
236
                ticketCount++;
3106 mandeep.dh 237
                if (!ticket.getStatus().equals(TicketStatus.CLOSED)) {
3090 mandeep.dh 238
                    openTicketCount++;
239
                }
240
                else {
241
                    closedTicketCount++;
242
                }
243
            }
244
        }
245
    }
246
 
3397 mandeep.dh 247
    public String getToday() {
248
        return SDF.format(new Date());
249
    }
250
 
251
    public String getYesterday() {
252
        Calendar calendar = Calendar.getInstance();
253
        calendar.setTime(new Date());
254
        calendar.add(Calendar.DAY_OF_MONTH, -1);
255
        return SDF.format(calendar.getTime());
256
    }
257
 
258
    public List<Agent> getAllAgents() {
259
        return CRMAuthorizingRealm.getAgents();
260
    }
261
 
2724 vikas 262
    public void setEmail(String email) {
263
        this.email = email;
264
    }
265
 
266
    public String getEmail() {
267
        return email;
268
    }
269
 
270
    public void setOrderId(String orderId) {
3390 mandeep.dh 271
        this.orderId = orderId;
2724 vikas 272
    }
273
 
3390 mandeep.dh 274
    public String getOrderId() {
2724 vikas 275
        return orderId;
276
    }
277
 
278
    public User getUser() {
279
        return user;
280
    }
281
 
282
    public long getOrderCount() {
283
        return orderCount;
284
    }
285
 
286
    public long getCompletedOrderCount() {
287
        return completedOrderCount;
288
    }
289
 
290
    public long getOpenOrderCount() {
291
        return openOrderCount;
292
    }
293
 
294
    public long getFailedOrderCount() {
295
        return failedOrderCount;
296
    }
297
 
298
    public double getCartItems() {
299
        return cartItems;
300
    }
301
 
302
    public String getLastLogin() {
303
        return lastLogin;
304
    }
305
 
306
    public String getCouponCode() {
307
        return couponCode;
308
    }
2830 vikas 309
 
310
    public long getUserCommunicationCount() {
311
        return userCommunicationCount;
312
    }
3090 mandeep.dh 313
 
314
    public long getTicketCount() {
315
        return ticketCount;
316
    }
317
 
318
    public long getOpenTicketCount() {
319
        return openTicketCount;
320
    }
321
 
322
    public long getClosedTicketCount() {
323
        return closedTicketCount;
324
    }
325
 
326
    public void setMobileNumber(String mobileNumber) {
327
        this.mobileNumber = mobileNumber;
328
    }
3096 mandeep.dh 329
 
330
    public String getTicketId() {
331
        return ticketId;
332
    }
333
 
334
    public void setTicketId(String ticketId) {
335
        this.ticketId = ticketId;
336
    }
3106 mandeep.dh 337
 
338
    public long getAgentTicketCount() {
339
        return agentTicketCount;
340
    }
341
 
342
    public long getAgentOpenTicketCount() {
343
        return agentOpenTicketCount;
344
    }
345
 
346
    public long getUnassignedTicketCount() {
347
        return unassignedTicketCount;
348
    }
349
 
350
    public long getAllTicketCount() {
351
        return allTicketCount;
352
    }
353
 
354
    public long getAllOpenTicketCount() {
355
        return allOpenTicketCount;
356
    }
357
 
358
    public long getActivityCount() {
359
        return activityCount;
360
    }
361
 
362
    public void setActivityCount(long activityCount) {
363
        this.activityCount = activityCount;
364
    }
3339 mandeep.dh 365
 
366
    public long getCustomerActivityCount() {
367
        return customerActivityCount;
368
    }
369
 
370
    public void setCustomerActivityCount(long customerActivityCount) {
371
        this.customerActivityCount = customerActivityCount;
372
    }
2724 vikas 373
}