Subversion Repositories SmartDukaan

Rev

Rev 2830 | Rev 3096 | 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;
4
import in.shop2020.crm.CRMService.Client;
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;
2674 vikas 17
 
2724 vikas 18
import java.text.SimpleDateFormat;
19
import java.util.Arrays;
20
import java.util.Date;
3090 mandeep.dh 21
import java.util.HashSet;
2724 vikas 22
import java.util.List;
3090 mandeep.dh 23
import java.util.Set;
2724 vikas 24
 
2674 vikas 25
import org.apache.log4j.Logger;
3090 mandeep.dh 26
import org.apache.shiro.SecurityUtils;
27
import org.apache.shiro.crypto.hash.Sha256Hash;
2674 vikas 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
    private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
39
 
40
    private static final Set<OrderStatus> failedStatusList = new HashSet<OrderStatus>(Arrays.asList(new OrderStatus[] {
41
            OrderStatus.SALES_RET_RESHIPPED,
42
            OrderStatus.SALES_RET_REFUNDED,
43
            OrderStatus.DOA_INVALID_REFUNDED,
44
            OrderStatus.DOA_INVALID_RESHIPPED,
45
            OrderStatus.DOA_VALID_REFUNDED,
46
            OrderStatus.DOA_RESHIPPED,
47
            OrderStatus.REFUNDED,
48
            OrderStatus.REJECTED,
49
            OrderStatus.FAILED}));
50
 
2724 vikas 51
    private String email;
52
    private long orderId;
3090 mandeep.dh 53
    private String mobileNumber;
2724 vikas 54
    private User user;
55
    private long orderCount;
56
    private long completedOrderCount;
57
    private long openOrderCount;
58
    private long failedOrderCount;
2830 vikas 59
    private long userCommunicationCount;
3090 mandeep.dh 60
    private long ticketCount;
61
    private long openTicketCount;
62
    private long closedTicketCount;
2724 vikas 63
    private String lastLogin;
64
    private double cartItems;
65
    private String couponCode = "";
2674 vikas 66
 
67
    @Action("/")
2724 vikas 68
    public String index() throws Exception {
3090 mandeep.dh 69
        try {
70
            createServiceClients();
71
 
72
            if (email == null) {
73
                return INPUT;
74
            }
75
 
76
            if (email.isEmpty()) {
77
                if (mobileNumber != null && !mobileNumber.isEmpty()) {
78
                    user = userContextServiceClient.getUserByMobileNumber(Long.parseLong(mobileNumber));
2724 vikas 79
                }
3090 mandeep.dh 80
                else {
81
                    if (orderId != 0) {
82
                        Order order = transactionServiceClient.getOrder(orderId);
83
                        user = userContextServiceClient.getUserById(order.getCustomer_id());
84
                    }
2724 vikas 85
                }
86
            }
3090 mandeep.dh 87
            else {
88
                user = userContextServiceClient.getUserByEmail(email);
2724 vikas 89
            }
3090 mandeep.dh 90
 
91
            if (user == null || user.getUserId() <= 0) {
92
                addActionError("Invalid Input");
93
                return INPUT;
94
            }
95
 
96
            loadUserCommunicationDetails(userContextServiceClient);
97
 
98
            loadOrderDetails(transactionServiceClient);
99
 
100
            loadCartDetails(userContextServiceClient);
101
 
102
            loadTicketDetails(crmServiceClient);
103
 
104
            return INDEX;            
2724 vikas 105
        }
3090 mandeep.dh 106
        catch (Exception e) {
2724 vikas 107
            addActionError("Invalid Input");
3090 mandeep.dh 108
            log.error("Error occurred", e);
109
            return INPUT;
2724 vikas 110
        }
3090 mandeep.dh 111
    }
112
 
113
    private void loadUserCommunicationDetails(
114
            in.shop2020.model.v1.user.UserContextService.Client userContextServiceClient)
115
            throws UserCommunicationException, TException {
116
        List<UserCommunication> userCommunication = userContextServiceClient.getUserCommunicationByUser(user.getUserId());
117
        userCommunicationCount = userCommunication.size();
118
    }
119
 
120
    private void loadOrderDetails(
121
            in.shop2020.model.v1.order.TransactionService.Client transactionServiceClient)
122
            throws TransactionServiceException, TException {
123
        List<Order> allOrders = transactionServiceClient.getOrdersForCustomer(user.getUserId(), 0, (new Date()).getTime(), null);
2724 vikas 124
        orderCount = allOrders.size();
3090 mandeep.dh 125
 
2724 vikas 126
        for (Order o : allOrders) {
127
            if (o.getStatus() == OrderStatus.DELIVERY_SUCCESS) {
128
                completedOrderCount++;
129
            }
130
            else if (failedStatusList.contains(o.getStatus())) {
131
                failedOrderCount++;
132
            }
133
            else {
134
                openOrderCount++;
135
            }
136
        }
3090 mandeep.dh 137
    }
138
 
139
    private void loadCartDetails(
140
            in.shop2020.model.v1.user.UserContextService.Client userContextServiceClient)
141
            throws UserContextException, TException {
142
        UserState userState = userContextServiceClient.getUserState(user.getUserId());
143
        lastLogin = sdf.format(new Date(userState.getLastLogin()));
144
        Cart cart = null;
145
 
2724 vikas 146
        try {
3090 mandeep.dh 147
            cart = userContextServiceClient.getCurrentCart(user.getUserId());
2724 vikas 148
            if (cart.getCouponCode() != null) {
149
                couponCode = cart.getCouponCode();
150
            }
151
            for (Line line : cart.getLines()) {
152
                cartItems += line.getQuantity();
153
            }
154
        } catch (Exception e) {
155
            log.warn("No cart assigned for this user", e);
156
        }
2674 vikas 157
    }
2724 vikas 158
 
3090 mandeep.dh 159
    private void loadTicketDetails(Client crmServiceClient) throws TException {
160
        // Fetching tickets' info
161
        ticketCount = 0;
162
        openTicketCount = 0;
163
        closedTicketCount = 0;
164
 
165
        List<Ticket> tickets = crmServiceClient.getTickets(user.getUserId());
166
        if (tickets != null) 
167
        {
168
            for (Ticket ticket : tickets) {
169
                ticketCount++;
170
                Activity activity = crmServiceClient.getLastActivity(ticket.getId());
171
 
172
                if (activity != null && !activity.getTicketStatus().equals(TicketStatus.CLOSED)) {
173
                    openTicketCount++;
174
                }
175
                else {
176
                    closedTicketCount++;
177
                }
178
            }
179
        }
180
    }
181
 
2724 vikas 182
    public void setEmail(String email) {
183
        this.email = email;
184
    }
185
 
186
    public String getEmail() {
187
        return email;
188
    }
189
 
190
    public void setOrderId(String orderId) {
3090 mandeep.dh 191
        if (orderId != null && !orderId.isEmpty()) {
2724 vikas 192
            this.orderId = Long.parseLong(orderId);
193
        }
194
    }
195
 
196
    public Long getOrderId() {
197
        return orderId;
198
    }
199
 
200
    public User getUser() {
201
        return user;
202
    }
203
 
204
    public long getOrderCount() {
205
        return orderCount;
206
    }
207
 
208
    public long getCompletedOrderCount() {
209
        return completedOrderCount;
210
    }
211
 
212
    public long getOpenOrderCount() {
213
        return openOrderCount;
214
    }
215
 
216
    public long getFailedOrderCount() {
217
        return failedOrderCount;
218
    }
219
 
220
    public double getCartItems() {
221
        return cartItems;
222
    }
223
 
224
    public String getLastLogin() {
225
        return lastLogin;
226
    }
227
 
228
    public String getCouponCode() {
229
        return couponCode;
230
    }
2830 vikas 231
 
232
    public long getUserCommunicationCount() {
233
        return userCommunicationCount;
234
    }
3090 mandeep.dh 235
 
236
    public long getTicketCount() {
237
        return ticketCount;
238
    }
239
 
240
    public long getOpenTicketCount() {
241
        return openTicketCount;
242
    }
243
 
244
    public long getClosedTicketCount() {
245
        return closedTicketCount;
246
    }
247
 
248
    public void setMobileNumber(String mobileNumber) {
249
        this.mobileNumber = mobileNumber;
250
    }
2724 vikas 251
}