Subversion Repositories SmartDukaan

Rev

Rev 4416 | Rev 4663 | 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
            public Boolean call() throws Exception {
76
                shipmentUpdates = blueDartTrackingService.getUpdates(order.getAirwaybill_no());
77
                return true;
78
            }
79
        }), 5, TimeUnit.SECONDS);
80
 
3578 mandeep.dh 81
        if (order.isCod() && OrderStatus.INIT.equals(order.getStatus())) {
82
            populateCODTicketId(order.getCustomer_id());
83
        }
84
 
4142 mandeep.dh 85
        if (canEditOrderAddress()) {
86
            userContextServiceClient = new UserClient().getClient();
87
            addresses = userContextServiceClient.getAllAddressesForUser(order.getCustomer_id());
88
        }
89
 
90
        return INDEX;
2674 vikas 91
    }
92
 
4142 mandeep.dh 93
    private boolean canEditOrderAddress() {
94
        return false;
95
    }
96
 
3578 mandeep.dh 97
    private void populateCODTicketId(long customerId) {
98
        try {
99
            SearchFilter searchFilter = new SearchFilter();
100
            searchFilter.setTicketCategory(TicketCategory.COD_VERIFICATION);
101
            searchFilter.setTicketStatuses(new ArrayList<TicketStatus>());
102
            searchFilter.getTicketStatuses().add(TicketStatus.OPEN);
103
            searchFilter.getTicketStatuses().add(TicketStatus.REOPEN);
104
            searchFilter.setCustomerId(customerId);
105
            crmServiceClient = new CRMClient().getClient();
106
            List<Ticket> tickets = crmServiceClient.getTickets(searchFilter);
107
            if (tickets != null && !tickets.isEmpty()) {
108
                codTicketId = tickets.get(0).getId();
109
            }
110
        } catch (TException e) {
111
            log.error("Error fetching tickets for customerId: " + customerId, e);
112
        }
113
    }
114
 
4142 mandeep.dh 115
    public String getPaymentGateway(Payment payment) {
116
        String gatewayName = "";
3578 mandeep.dh 117
 
4142 mandeep.dh 118
        try {
119
            Client paymentServiceClient = new PaymentClient().getClient();
120
            gatewayName = paymentServiceClient.getPaymentGateway(payment.getGatewayId()).getName();
121
        } catch (TTransportException e) {
122
        } catch (PaymentException e) {
123
        } catch (TException e) {
2674 vikas 124
        }
4142 mandeep.dh 125
 
126
        return gatewayName;
2674 vikas 127
    }
128
 
4142 mandeep.dh 129
    public String getProductName(LineItem lineItem) {
130
        String name = ModelUtils.extractProductNameFromLineItem(lineItem);
131
 
4146 mandeep.dh 132
        if (lineItem.getColor() != null && !lineItem.getColor().isEmpty()) {
4142 mandeep.dh 133
            name += "(" + lineItem.getColor() + ")";
2674 vikas 134
        }
4142 mandeep.dh 135
 
136
        return name;
2674 vikas 137
    }
138
 
4142 mandeep.dh 139
    public int convertDouble(double value) {
140
        return (int)value;
2674 vikas 141
    }
3578 mandeep.dh 142
 
4142 mandeep.dh 143
    public String getAddress(Order order) {
144
        return ModelUtils.extractAddressFromOrder(order);
145
    }
146
 
2728 vikas 147
    public String getPaymentMethod(List<Attribute> paymentAttributes) {
148
        String paymentMethod = null;
3578 mandeep.dh 149
        if (paymentAttributes == null || paymentAttributes.isEmpty()) {
2728 vikas 150
            return "N/A";
151
        }
3578 mandeep.dh 152
        for (Attribute a : paymentAttributes) {
153
            if ("payMethod".equals(a.getName())) {
2728 vikas 154
                paymentMethod = Constants.PAYMENT_METHOD.get(a.getValue());
155
                break;
156
            }
157
        }
158
        return paymentMethod != null ? paymentMethod : "N/A";
159
    }
2674 vikas 160
 
161
    public void setOrderId(String orderId) {
162
        try {
163
            this.orderId = Long.parseLong(orderId);
3578 mandeep.dh 164
        } catch (NumberFormatException e) {
2674 vikas 165
            log.error(e);
166
        }
167
    }
168
 
4142 mandeep.dh 169
    public List<Payment> getPayments() {
170
        return payments;
2674 vikas 171
    }
172
 
3090 mandeep.dh 173
    public List<ShipmentUpdate> getShipmentUpdates() {
174
        return shipmentUpdates;
175
    }
176
 
177
    public void setShipmentUpdates(List<ShipmentUpdate> shipmentUpdates) {
178
        this.shipmentUpdates = shipmentUpdates;
179
    }
3499 mandeep.dh 180
 
181
    public Order getOrder() {
182
        return order;
183
    }
184
 
185
    public void setOrder(Order order) {
186
        this.order = order;
187
    }
3578 mandeep.dh 188
 
189
    public Long getCodTicketId() {
190
        return codTicketId;
191
    }
192
 
193
    public void setCodTicketId(Long codTicketId) {
194
        this.codTicketId = codTicketId;
195
    }
4142 mandeep.dh 196
 
197
    public List<Address> getAddresses() {
198
        return addresses;
199
    }
200
 
201
    public void setAddresses(List<Address> addresses) {
202
        this.addresses = addresses;
203
    }
4241 anupam.sin 204
 
205
    public String getOrderStatusDescription(Order order) {
206
        String status = order.getStatus().getDescription();
207
 
208
        if (order.getStatus() == OrderStatus.DELIVERY_SUCCESS) {
209
            status = "Completed";
210
        }
211
 
212
        return status;
213
    }
2674 vikas 214
}