Subversion Repositories SmartDukaan

Rev

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