Subversion Repositories SmartDukaan

Rev

Rev 4241 | Rev 4490 | 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
 
3578 mandeep.dh 3
import in.shop2020.crm.SearchFilter;
4
import in.shop2020.crm.Ticket;
5
import in.shop2020.crm.TicketCategory;
6
import in.shop2020.crm.TicketStatus;
2674 vikas 7
import in.shop2020.model.v1.order.LineItem;
8
import in.shop2020.model.v1.order.Order;
3578 mandeep.dh 9
import in.shop2020.model.v1.order.OrderStatus;
4142 mandeep.dh 10
import in.shop2020.model.v1.user.Address;
2728 vikas 11
import in.shop2020.payments.Attribute;
12
import in.shop2020.payments.Constants;
2674 vikas 13
import in.shop2020.payments.Payment;
2728 vikas 14
import in.shop2020.payments.PaymentException;
4142 mandeep.dh 15
import in.shop2020.payments.PaymentService.Client;
3090 mandeep.dh 16
import in.shop2020.serving.model.ShipmentUpdate;
17
import in.shop2020.serving.services.BlueDartTrackingService;
3578 mandeep.dh 18
import in.shop2020.thrift.clients.CRMClient;
3128 rajveer 19
import in.shop2020.thrift.clients.PaymentClient;
20
import in.shop2020.thrift.clients.TransactionClient;
4142 mandeep.dh 21
import in.shop2020.thrift.clients.UserClient;
3546 mandeep.dh 22
import in.shop2020.utils.ModelUtils;
2674 vikas 23
 
24
import java.util.ArrayList;
4416 mandeep.dh 25
import java.util.Collections;
2674 vikas 26
import java.util.List;
4416 mandeep.dh 27
import java.util.concurrent.Callable;
28
import java.util.concurrent.Executors;
29
import java.util.concurrent.TimeUnit;
2674 vikas 30
 
31
import org.apache.log4j.Logger;
2728 vikas 32
import org.apache.thrift.TException;
4142 mandeep.dh 33
import org.apache.thrift.transport.TTransportException;
2674 vikas 34
 
35
/**
36
 * @author vikas
3578 mandeep.dh 37
 * 
2674 vikas 38
 */
39
@SuppressWarnings("serial")
40
public class UserOrderInfoController extends BaseController {
3578 mandeep.dh 41
    private static Logger                  log                     = Logger.getLogger(Class.class);
3090 mandeep.dh 42
    private static BlueDartTrackingService blueDartTrackingService = new BlueDartTrackingService();
43
 
4142 mandeep.dh 44
    private long                 orderId;
45
    private Order                order;
46
    private List<Payment>        payments;
4416 mandeep.dh 47
    private List<ShipmentUpdate> shipmentUpdates = new ArrayList<ShipmentUpdate>();
4142 mandeep.dh 48
    private Long                 codTicketId;
49
    private List<Address>        addresses;
2674 vikas 50
 
3578 mandeep.dh 51
    public UserOrderInfoController() {
2674 vikas 52
        super();
53
    }
54
 
55
    public String index() throws Exception {
3128 rajveer 56
        PaymentClient paymentServiceClient = new PaymentClient();
57
        TransactionClient transactionServiceClient = new TransactionClient();
3090 mandeep.dh 58
 
2674 vikas 59
        try {
3499 mandeep.dh 60
            order = transactionServiceClient.getClient().getOrder(orderId);
3578 mandeep.dh 61
        } catch (Exception e) {
2674 vikas 62
            addActionError("Invalid order id or no order selected.");
63
            return "index";
64
        }
65
 
4142 mandeep.dh 66
        payments = paymentServiceClient.getClient()
3578 mandeep.dh 67
                .getPaymentForTxnId(order.getTransactionId());
3090 mandeep.dh 68
 
3578 mandeep.dh 69
 
4416 mandeep.dh 70
        // Spawning a thread to capture shipment updates from Bluedart
71
        // This is done to ensure that response from Crm web app is sent
72
        // within given time limits. Also, we wont be affected in the cases 
73
        // where bluedart site is down or slow
74
        Executors.newSingleThreadExecutor().invokeAll(Collections.singletonList(new Callable<Boolean>() {
75
            @Override
76
            public Boolean call() throws Exception {
77
                shipmentUpdates = blueDartTrackingService.getUpdates(order.getAirwaybill_no());
78
                return true;
79
            }
80
        }), 5, TimeUnit.SECONDS);
81
 
3578 mandeep.dh 82
        if (order.isCod() && OrderStatus.INIT.equals(order.getStatus())) {
83
            populateCODTicketId(order.getCustomer_id());
84
        }
85
 
4142 mandeep.dh 86
        if (canEditOrderAddress()) {
87
            userContextServiceClient = new UserClient().getClient();
88
            addresses = userContextServiceClient.getAllAddressesForUser(order.getCustomer_id());
89
        }
90
 
91
        return INDEX;
2674 vikas 92
    }
93
 
4142 mandeep.dh 94
    private boolean canEditOrderAddress() {
95
        return false;
96
    }
97
 
3578 mandeep.dh 98
    private void populateCODTicketId(long customerId) {
99
        try {
100
            SearchFilter searchFilter = new SearchFilter();
101
            searchFilter.setTicketCategory(TicketCategory.COD_VERIFICATION);
102
            searchFilter.setTicketStatuses(new ArrayList<TicketStatus>());
103
            searchFilter.getTicketStatuses().add(TicketStatus.OPEN);
104
            searchFilter.getTicketStatuses().add(TicketStatus.REOPEN);
105
            searchFilter.setCustomerId(customerId);
106
            crmServiceClient = new CRMClient().getClient();
107
            List<Ticket> tickets = crmServiceClient.getTickets(searchFilter);
108
            if (tickets != null && !tickets.isEmpty()) {
109
                codTicketId = tickets.get(0).getId();
110
            }
111
        } catch (TException e) {
112
            log.error("Error fetching tickets for customerId: " + customerId, e);
113
        }
114
    }
115
 
4142 mandeep.dh 116
    public String getPaymentGateway(Payment payment) {
117
        String gatewayName = "";
3578 mandeep.dh 118
 
4142 mandeep.dh 119
        try {
120
            Client paymentServiceClient = new PaymentClient().getClient();
121
            gatewayName = paymentServiceClient.getPaymentGateway(payment.getGatewayId()).getName();
122
        } catch (TTransportException e) {
123
        } catch (PaymentException e) {
124
        } catch (TException e) {
2674 vikas 125
        }
4142 mandeep.dh 126
 
127
        return gatewayName;
2674 vikas 128
    }
129
 
4142 mandeep.dh 130
    public String getProductName(LineItem lineItem) {
131
        String name = ModelUtils.extractProductNameFromLineItem(lineItem);
132
 
4146 mandeep.dh 133
        if (lineItem.getColor() != null && !lineItem.getColor().isEmpty()) {
4142 mandeep.dh 134
            name += "(" + lineItem.getColor() + ")";
2674 vikas 135
        }
4142 mandeep.dh 136
 
137
        return name;
2674 vikas 138
    }
139
 
4142 mandeep.dh 140
    public int convertDouble(double value) {
141
        return (int)value;
2674 vikas 142
    }
3578 mandeep.dh 143
 
4142 mandeep.dh 144
    public String getAddress(Order order) {
145
        return ModelUtils.extractAddressFromOrder(order);
146
    }
147
 
2728 vikas 148
    public String getPaymentMethod(List<Attribute> paymentAttributes) {
149
        String paymentMethod = null;
3578 mandeep.dh 150
        if (paymentAttributes == null || paymentAttributes.isEmpty()) {
2728 vikas 151
            return "N/A";
152
        }
3578 mandeep.dh 153
        for (Attribute a : paymentAttributes) {
154
            if ("payMethod".equals(a.getName())) {
2728 vikas 155
                paymentMethod = Constants.PAYMENT_METHOD.get(a.getValue());
156
                break;
157
            }
158
        }
159
        return paymentMethod != null ? paymentMethod : "N/A";
160
    }
2674 vikas 161
 
162
    public void setOrderId(String orderId) {
163
        try {
164
            this.orderId = Long.parseLong(orderId);
3578 mandeep.dh 165
        } catch (NumberFormatException e) {
2674 vikas 166
            log.error(e);
167
        }
168
    }
169
 
4142 mandeep.dh 170
    public List<Payment> getPayments() {
171
        return payments;
2674 vikas 172
    }
173
 
3090 mandeep.dh 174
    public List<ShipmentUpdate> getShipmentUpdates() {
175
        return shipmentUpdates;
176
    }
177
 
178
    public void setShipmentUpdates(List<ShipmentUpdate> shipmentUpdates) {
179
        this.shipmentUpdates = shipmentUpdates;
180
    }
3499 mandeep.dh 181
 
182
    public Order getOrder() {
183
        return order;
184
    }
185
 
186
    public void setOrder(Order order) {
187
        this.order = order;
188
    }
3578 mandeep.dh 189
 
190
    public Long getCodTicketId() {
191
        return codTicketId;
192
    }
193
 
194
    public void setCodTicketId(Long codTicketId) {
195
        this.codTicketId = codTicketId;
196
    }
4142 mandeep.dh 197
 
198
    public List<Address> getAddresses() {
199
        return addresses;
200
    }
201
 
202
    public void setAddresses(List<Address> addresses) {
203
        this.addresses = addresses;
204
    }
4241 anupam.sin 205
 
206
    public String getOrderStatusDescription(Order order) {
207
        String status = order.getStatus().getDescription();
208
 
209
        if (order.getStatus() == OrderStatus.DELIVERY_SUCCESS) {
210
            status = "Completed";
211
        }
212
 
213
        return status;
214
    }
2674 vikas 215
}