Subversion Repositories SmartDukaan

Rev

Rev 4034 | Rev 4142 | 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;
2728 vikas 10
import in.shop2020.payments.Attribute;
11
import in.shop2020.payments.Constants;
2674 vikas 12
import in.shop2020.payments.Payment;
2728 vikas 13
import in.shop2020.payments.PaymentException;
3090 mandeep.dh 14
import in.shop2020.serving.model.ShipmentUpdate;
15
import in.shop2020.serving.services.BlueDartTrackingService;
3578 mandeep.dh 16
import in.shop2020.thrift.clients.CRMClient;
3128 rajveer 17
import in.shop2020.thrift.clients.PaymentClient;
18
import in.shop2020.thrift.clients.TransactionClient;
3546 mandeep.dh 19
import in.shop2020.utils.ModelUtils;
2674 vikas 20
 
21
import java.text.SimpleDateFormat;
22
import java.util.ArrayList;
23
import java.util.Date;
24
import java.util.HashMap;
25
import java.util.List;
26
import java.util.Map;
27
import java.util.TimeZone;
28
 
29
import org.apache.log4j.Logger;
2728 vikas 30
import org.apache.thrift.TException;
2674 vikas 31
 
32
/**
33
 * @author vikas
3578 mandeep.dh 34
 * 
2674 vikas 35
 */
36
@SuppressWarnings("serial")
37
public class UserOrderInfoController extends BaseController {
3578 mandeep.dh 38
    private static Logger                  log                     = Logger.getLogger(Class.class);
3090 mandeep.dh 39
    private static BlueDartTrackingService blueDartTrackingService = new BlueDartTrackingService();
40
 
3578 mandeep.dh 41
    private long                           orderId;
42
    private Order                          order;
43
    private Map<String, String>            userOrder;
44
    private List<Map<String, String>>      lineItemsList;
45
    private List<Map<String, String>>      paymentsList;
46
    private List<ShipmentUpdate>           shipmentUpdates;
47
    private Long                           codTicketId;
2674 vikas 48
 
3578 mandeep.dh 49
    public UserOrderInfoController() {
2674 vikas 50
        super();
51
    }
52
 
53
    public String index() throws Exception {
3128 rajveer 54
        PaymentClient paymentServiceClient = new PaymentClient();
55
        TransactionClient transactionServiceClient = new TransactionClient();
3090 mandeep.dh 56
 
2674 vikas 57
        try {
3499 mandeep.dh 58
            order = transactionServiceClient.getClient().getOrder(orderId);
3578 mandeep.dh 59
        } catch (Exception e) {
2674 vikas 60
            addActionError("Invalid order id or no order selected.");
61
            return "index";
62
        }
63
 
64
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
65
        sdf.setTimeZone(TimeZone.getTimeZone("IST"));
66
        setUserOrderMap(order, sdf);
67
        setLineItems(order.getLineitems());
68
 
3578 mandeep.dh 69
        List<Payment> payments = paymentServiceClient.getClient()
70
                .getPaymentForTxnId(order.getTransactionId());
2674 vikas 71
        if (payments != null && !payments.isEmpty()) {
2728 vikas 72
            setPayments(payments, sdf, paymentServiceClient);
2674 vikas 73
        }
3090 mandeep.dh 74
 
3578 mandeep.dh 75
        shipmentUpdates = blueDartTrackingService.getUpdates(order
76
                .getAirwaybill_no());
77
 
78
        if (order.isCod() && OrderStatus.INIT.equals(order.getStatus())) {
79
            populateCODTicketId(order.getCustomer_id());
80
        }
81
 
2674 vikas 82
        return "index";
83
    }
84
 
3578 mandeep.dh 85
    private void populateCODTicketId(long customerId) {
86
        try {
87
            SearchFilter searchFilter = new SearchFilter();
88
            searchFilter.setTicketCategory(TicketCategory.COD_VERIFICATION);
89
            searchFilter.setTicketStatuses(new ArrayList<TicketStatus>());
90
            searchFilter.getTicketStatuses().add(TicketStatus.OPEN);
91
            searchFilter.getTicketStatuses().add(TicketStatus.REOPEN);
92
            searchFilter.setCustomerId(customerId);
93
            crmServiceClient = new CRMClient().getClient();
94
            List<Ticket> tickets = crmServiceClient.getTickets(searchFilter);
95
            if (tickets != null && !tickets.isEmpty()) {
96
                codTicketId = tickets.get(0).getId();
97
            }
98
        } catch (TException e) {
99
            log.error("Error fetching tickets for customerId: " + customerId, e);
100
        }
101
    }
102
 
103
    private void setPayments(List<Payment> payments, SimpleDateFormat sdf,
104
            PaymentClient paymentServiceClient) throws PaymentException,
105
            TException {
106
        paymentsList = new ArrayList<Map<String, String>>();
2674 vikas 107
        for (Payment payment : payments) {
3578 mandeep.dh 108
            Map<String, String> paymentMap = new HashMap<String, String>();
109
            if (payment.getAuthCode() != null
110
                    && !payment.getAuthCode().isEmpty()) {
2674 vikas 111
                paymentMap.put("authcode", payment.getAuthCode());
112
            }
3578 mandeep.dh 113
            if (payment.getDescription() != null
114
                    && !payment.getDescription().isEmpty()) {
2674 vikas 115
                paymentMap.put("description", payment.getDescription());
116
            }
3578 mandeep.dh 117
            if (payment.getErrorCode() != null
118
                    && !payment.getErrorCode().isEmpty()) {
2674 vikas 119
                paymentMap.put("errorcode", payment.getErrorCode());
120
            }
3578 mandeep.dh 121
            if (payment.getGatewayPaymentId() != null
122
                    && !payment.getGatewayPaymentId().isEmpty()) {
123
                paymentMap.put("gatewaypaymentid",
124
                        payment.getGatewayPaymentId());
2674 vikas 125
            }
3578 mandeep.dh 126
            if (payment.getGatewayTxnDate() != null
127
                    && !payment.getGatewayTxnDate().isEmpty()) {
2674 vikas 128
                paymentMap.put("gatewaytxndt", payment.getGatewayTxnDate());
129
            }
3578 mandeep.dh 130
            if (payment.getGatewayTxnId() != null
131
                    && !payment.getGatewayTxnId().isEmpty()) {
2674 vikas 132
                paymentMap.put("gatewaytxnid", payment.getGatewayTxnId());
133
            }
3578 mandeep.dh 134
            if (payment.getGatewayTxnStatus() != null
135
                    && !payment.getGatewayTxnStatus().isEmpty()) {
136
                paymentMap.put("gatewaytxnstatus",
137
                        payment.getGatewayTxnStatus());
2674 vikas 138
            }
3578 mandeep.dh 139
            if (payment.getReferenceCode() != null
140
                    && !payment.getReferenceCode().isEmpty()) {
2674 vikas 141
                paymentMap.put("refcode", payment.getReferenceCode());
142
            }
3578 mandeep.dh 143
            if (payment.getSessionId() != null
144
                    && !payment.getSessionId().isEmpty()) {
2674 vikas 145
                paymentMap.put("sessioid", payment.getSessionId());
146
            }
147
            paymentMap.put("amount", Double.toString(payment.getAmount()));
148
            paymentMap.put("status", payment.getStatus().name());
2728 vikas 149
            try {
3578 mandeep.dh 150
                paymentMap.put("gatewayname", paymentServiceClient.getClient()
151
                        .getPaymentGateway(payment.getGatewayId()).getName());
152
            } catch (TException e) {
2728 vikas 153
                log.warn("No payment gateway set", e);
154
            }
3578 mandeep.dh 155
            paymentMap.put("paymethod",
156
                    getPaymentMethod(payment.getAttributes()));
157
 
2674 vikas 158
            if (payment.getSuccessTimestamp() != 0) {
3578 mandeep.dh 159
                paymentMap.put("successts",
160
                        sdf.format(new Date(payment.getSuccessTimestamp())));
2674 vikas 161
            }
162
            paymentsList.add(paymentMap);
163
        }
164
    }
165
 
166
    private void setLineItems(List<LineItem> lineitems) {
3578 mandeep.dh 167
        lineItemsList = new ArrayList<Map<String, String>>();
2674 vikas 168
        for (LineItem lItem : lineitems) {
169
            Map<String, String> lineItemMap = new HashMap<String, String>();
3578 mandeep.dh 170
            lineItemMap.put("name",
3996 mandeep.dh 171
                    ModelUtils.extractProductNameFromLineItem(lItem) + " " + lItem.getColor());
2674 vikas 172
            lineItemMap.put("quantity", Double.toString(lItem.getQuantity()));
3578 mandeep.dh 173
            lineItemMap.put("unit_price",
174
                    Double.toString(lItem.getUnit_price()));
175
            lineItemMap.put("total_price",
176
                    Double.toString(lItem.getTotal_price()));
2674 vikas 177
            lineItemsList.add(lineItemMap);
178
        }
179
    }
180
 
181
    private void setUserOrderMap(Order order, SimpleDateFormat sdf) {
182
        userOrder = new HashMap<String, String>();
183
        userOrder.put("id", Long.toString(order.getId()));
184
        if (order.getCreated_timestamp() != 0) {
3578 mandeep.dh 185
            userOrder.put("created",
186
                    sdf.format(new Date(order.getCreated_timestamp())));
2674 vikas 187
        }
188
        if (order.getDelivery_timestamp() != 0) {
3578 mandeep.dh 189
            userOrder.put("delivered",
190
                    sdf.format(new Date(order.getDelivery_timestamp())));
2674 vikas 191
        }
192
        if (order.getAccepted_timestamp() != 0) {
3578 mandeep.dh 193
            userOrder.put("accepted",
194
                    sdf.format(new Date(order.getAccepted_timestamp())));
2674 vikas 195
        }
196
        if (order.getBilling_timestamp() != 0) {
3578 mandeep.dh 197
            userOrder.put("billingts",
198
                    sdf.format(new Date(order.getBilling_timestamp())));
2674 vikas 199
        }
200
        if (order.getExpected_delivery_time() != 0) {
3578 mandeep.dh 201
            userOrder.put("expdelivery",
202
                    sdf.format(new Date(order.getExpected_delivery_time())));
2674 vikas 203
        }
204
        if (order.getShipping_timestamp() != 0) {
3578 mandeep.dh 205
            userOrder.put("shippingts",
206
                    sdf.format(new Date(order.getShipping_timestamp())));
2674 vikas 207
        }
208
        if (order.getPickup_timestamp() != 0) {
3578 mandeep.dh 209
            userOrder.put("pickupts",
210
                    sdf.format(new Date(order.getPickup_timestamp())));
2674 vikas 211
        }
212
        if (order.getOutofstock_timestamp() != 0) {
3578 mandeep.dh 213
            userOrder.put("outofstockts",
214
                    sdf.format(new Date(order.getOutofstock_timestamp())));
2674 vikas 215
        }
3996 mandeep.dh 216
 
2674 vikas 217
        userOrder.put("serialno", Long.toString(order.getSerialNo()));
218
        userOrder.put("airwaybillno", order.getAirwaybill_no());
219
        userOrder.put("billedby", order.getBilled_by());
220
        userOrder.put("invoiceno", order.getInvoice_number());
221
        userOrder.put("receiver", order.getReceiver());
222
        userOrder.put("status", order.getStatusDescription());
223
        userOrder.put("trackingid", order.getTracking_id());
3996 mandeep.dh 224
        userOrder.put("promiseddelivery", sdf.format(new Date(order.getPromised_delivery_time())));
4034 mandeep.dh 225
        userOrder.put("expectedshipping", sdf.format(new Date(order.getExpected_shipping_time())));
4105 mandeep.dh 226
        userOrder.put("promisedshipping", sdf.format(new Date(order.getPromised_shipping_time())));
4034 mandeep.dh 227
        userOrder.put("delayreason", order.getDelayReason() != null ? order.getDelayReason().name() : "");
2674 vikas 228
        userOrder.put("amount", Double.toString(order.getTotal_amount()));
3546 mandeep.dh 229
        userOrder.put("shipping", ModelUtils.extractAddressFromOrder(order));
2674 vikas 230
    }
3578 mandeep.dh 231
 
2728 vikas 232
    public String getPaymentMethod(List<Attribute> paymentAttributes) {
233
        String paymentMethod = null;
3578 mandeep.dh 234
        if (paymentAttributes == null || paymentAttributes.isEmpty()) {
2728 vikas 235
            return "N/A";
236
        }
3578 mandeep.dh 237
        for (Attribute a : paymentAttributes) {
238
            if ("payMethod".equals(a.getName())) {
2728 vikas 239
                paymentMethod = Constants.PAYMENT_METHOD.get(a.getValue());
240
                break;
241
            }
242
        }
243
        return paymentMethod != null ? paymentMethod : "N/A";
244
    }
2674 vikas 245
 
246
    public void setOrderId(String orderId) {
247
        try {
248
            this.orderId = Long.parseLong(orderId);
3578 mandeep.dh 249
        } catch (NumberFormatException e) {
2674 vikas 250
            log.error(e);
251
        }
252
    }
253
 
254
    public Map<String, String> getUserOrder() {
255
        return userOrder;
256
    }
257
 
258
    public List<Map<String, String>> getLineItemsList() {
259
        return lineItemsList;
260
    }
261
 
262
    public List<Map<String, String>> getPaymentsList() {
263
        return paymentsList;
264
    }
3090 mandeep.dh 265
 
266
    public List<ShipmentUpdate> getShipmentUpdates() {
267
        return shipmentUpdates;
268
    }
269
 
270
    public void setShipmentUpdates(List<ShipmentUpdate> shipmentUpdates) {
271
        this.shipmentUpdates = shipmentUpdates;
272
    }
3499 mandeep.dh 273
 
274
    public Order getOrder() {
275
        return order;
276
    }
277
 
278
    public void setOrder(Order order) {
279
        this.order = order;
280
    }
3578 mandeep.dh 281
 
282
    public Long getCodTicketId() {
283
        return codTicketId;
284
    }
285
 
286
    public void setCodTicketId(Long codTicketId) {
287
        this.codTicketId = codTicketId;
288
    }
2674 vikas 289
}