Subversion Repositories SmartDukaan

Rev

Rev 5554 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4801 anupam.sin 1
package in.shop2020.support.controllers;
2
 
3
import java.io.ByteArrayOutputStream;
4
import java.io.IOException;
5
import java.text.DateFormat;
6
import java.text.ParseException;
7
import java.text.SimpleDateFormat;
8
import java.util.ArrayList;
9
import java.util.Calendar;
10
import java.util.Date;
11
import java.util.HashMap;
12
import java.util.List;
13
import java.util.Map;
14
import java.util.TimeZone;
15
 
16
import javax.servlet.ServletOutputStream;
17
import javax.servlet.http.HttpServletRequest;
18
import javax.servlet.http.HttpServletResponse;
19
import javax.servlet.http.HttpSession;
20
 
21
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
22
import org.apache.poi.ss.usermodel.Cell;
23
import org.apache.poi.ss.usermodel.CellStyle;
24
import org.apache.poi.ss.usermodel.CreationHelper;
25
import org.apache.poi.ss.usermodel.Font;
26
import org.apache.poi.ss.usermodel.Row;
27
import org.apache.poi.ss.usermodel.Sheet;
28
import org.apache.poi.ss.usermodel.Workbook;
29
import org.apache.poi.ss.util.CellRangeAddress;
30
import org.apache.struts2.interceptor.ServletRequestAware;
31
import org.apache.struts2.interceptor.ServletResponseAware;
32
import org.apache.thrift.TException;
33
import org.apache.thrift.transport.TTransportException;
34
import org.slf4j.Logger;
35
import org.slf4j.LoggerFactory;
36
 
37
import in.shop2020.logistics.LogisticsServiceException;
38
import in.shop2020.logistics.Provider;
5354 anupam.sin 39
import in.shop2020.model.v1.order.LineItem;
4801 anupam.sin 40
import in.shop2020.model.v1.order.Order;
41
import in.shop2020.model.v1.order.OrderStatus;
42
import in.shop2020.model.v1.order.TransactionServiceException;
43
import in.shop2020.support.utils.ReportsUtils;
44
import in.shop2020.thrift.clients.LogisticsClient;
45
import in.shop2020.thrift.clients.TransactionClient;
46
 
47
public class CourierPerformanceController implements ServletRequestAware, ServletResponseAware {
48
 
49
    private List<OrderStatus> rtoStatuses;
50
    private List<Order> orders;
51
 
52
    private static Logger log = LoggerFactory.getLogger(CourierPerformanceController.class);
53
 
54
    private HttpServletResponse response;
55
    private HttpServletRequest request;
56
    private HttpSession session;
57
    private String errorMsg;
58
    private Date startDate;
59
    private Date endDate;
60
    private Map<Long, String> logisticProviderMap;
61
 
62
    public CourierPerformanceController() {
63
        rtoStatuses = new ArrayList<OrderStatus>();
64
        rtoStatuses.add(OrderStatus.RTO_IN_TRANSIT);
65
        rtoStatuses.add(OrderStatus.RTO_RECEIVED_PRESTINE);
66
        rtoStatuses.add(OrderStatus.RTO_RESHIPPED);
67
        rtoStatuses.add(OrderStatus.RTO_REFUNDED);
68
        rtoStatuses.add(OrderStatus.RTO_RECEIVED_DAMAGED);
69
        rtoStatuses.add(OrderStatus.RTO_LOST_IN_TRANSIT);
70
        rtoStatuses.add(OrderStatus.RTO_DAMAGED_RESHIPPED);
71
        rtoStatuses.add(OrderStatus.RTO_DAMAGED_REFUNDED);
72
        rtoStatuses.add(OrderStatus.RTO_LOST_IN_TRANSIT_RESHIPPED);
73
        rtoStatuses.add(OrderStatus.RTO_LOST_IN_TRANSIT_REFUNDED);
74
        rtoStatuses.add(OrderStatus.RTO_INVENTORY_REVERSED);
75
    }
76
 
77
    public String index() {
78
        log.info(request.getServletPath());
79
        if (!ReportsUtils.canAccessReport(
80
                (Long) session.getAttribute(ReportsUtils.ROLE),
81
                request.getServletPath())) 
82
        {
83
            return "authfail";
84
        }
85
        return "index";
86
    }
87
 
88
    public String create() {
89
        try {
90
            logisticProviderMap = new HashMap<Long, String>();
91
            LogisticsClient lc = new LogisticsClient();
92
            List<Provider> providers = lc.getClient().getAllProviders();    
93
            for (Provider provider : providers) {
94
                logisticProviderMap.put(provider.getId(), provider.getName());
95
            }
96
 
97
            String startDateStr = request.getParameter("startDate");
98
            String endDateStr = request.getParameter("endDate");
99
 
100
            DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
101
            df.setTimeZone(TimeZone.getTimeZone("IST"));
102
            try {
103
                startDate = df.parse(startDateStr);
104
                endDate = df.parse(endDateStr);
105
                //Calendar cal = Calendar.getInstance();
106
                //cal.setTime(endDate);
107
                //endDate.setTime(cal.getTimeInMillis());
108
            } catch (ParseException pe) {
109
                errorMsg = "Please enter start and end dates in format MM/dd/yyyy";
110
                return "index";
111
            }
112
 
113
            response.setContentType("application/vnd.ms-excel");
114
 
115
            response.setHeader("Content-disposition", "inline; filename=" + "courier-performance-report" + ".xls");
116
 
117
            ServletOutputStream sos;
118
            try {
119
                ByteArrayOutputStream baos = getSpreadSheetData();
120
                sos = response.getOutputStream();
121
                baos.writeTo(sos);
122
                sos.flush();
123
            } catch (IOException e) {
124
                log.error("Unable to stream the courier performance report", e);
125
                errorMsg = "Failed to write to response.";
126
            }
127
        } catch (TTransportException e) {
128
            // TODO Auto-generated catch block
129
            e.printStackTrace();
130
        } catch (TException e) {
131
            // TODO Auto-generated catch block
132
            e.printStackTrace();
133
        } catch (LogisticsServiceException e) {
134
            // TODO Auto-generated catch block
135
            e.printStackTrace();
136
        }
137
        return "index";
138
    }
139
 
140
    private ByteArrayOutputStream getSpreadSheetData() {
141
        ByteArrayOutputStream baosXLS = new ByteArrayOutputStream();
142
 
143
        Workbook wb = new HSSFWorkbook();
144
 
145
        Font font = wb.createFont();
146
        font.setBoldweight(Font.BOLDWEIGHT_BOLD);
147
        CellStyle style = wb.createCellStyle();
148
        style.setFont(font);
149
 
150
        CreationHelper createHelper = wb.getCreationHelper();
151
        CellStyle dateCellStyle = wb.createCellStyle();
152
        dateCellStyle.setDataFormat(createHelper.createDataFormat().getFormat("DD/MM/YYYY"));
153
 
154
        createRtoSheet(wb, style, dateCellStyle);
155
        createDeliveredSheet(wb, style, dateCellStyle);
156
 
157
        // Write the workbook to the output stream
158
        try {
159
            wb.write(baosXLS);
160
            baosXLS.close();
161
        } catch (IOException e) {
162
            log.error("Unable to get the byte array for the affiliate report", e);
163
        }       
164
        return baosXLS;
165
    }
166
 
167
    private void createRtoSheet(Workbook wb, 
168
                                       CellStyle style,
169
                                       CellStyle dateCellStyle) {
170
        // Summary SHEET
171
        Sheet sheet1 = wb.createSheet("RTO");
172
        short affSerialNo = 0;
173
 
174
        DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
175
 
176
        Row affTitleRow = sheet1.createRow(affSerialNo ++);
177
        Cell affTitleCell = affTitleRow.createCell(0);
178
        affTitleCell.setCellValue("Courier Performance Report : RTO Orders");
179
        affTitleCell.setCellStyle(style);
180
        sheet1.addMergedRegion(new CellRangeAddress(0, 0, 0, 6));
181
 
182
        sheet1.createRow(affSerialNo ++);
183
 
184
        Row affDateRangeRow = sheet1.createRow(affSerialNo ++);
185
        Cell affDateRangeCell = affDateRangeRow.createCell(0);
186
        affDateRangeCell.setCellValue("Date Range : " + df.format(startDate) + " - " + df.format(endDate));
187
        affDateRangeCell.setCellStyle(style);
188
        sheet1.addMergedRegion(new CellRangeAddress(3, 3, 0, 6));
189
 
190
        sheet1.createRow(affSerialNo ++);sheet1.createRow(affSerialNo ++);
191
 
192
        Row affHeaderRow = sheet1.createRow(affSerialNo++);
5428 anupam.sin 193
 
4801 anupam.sin 194
        affHeaderRow.createCell(0).setCellValue("Order Id");
195
        affHeaderRow.createCell(1).setCellValue("Payment Type");
5428 anupam.sin 196
        affHeaderRow.createCell(2).setCellValue("Product Name");
197
        affHeaderRow.createCell(3).setCellValue("AWB");
198
        affHeaderRow.createCell(4).setCellValue("Pincode");
199
        affHeaderRow.createCell(5).setCellValue("City");
200
        affHeaderRow.createCell(6).setCellValue("Logistics Provider");
201
        affHeaderRow.createCell(7).setCellValue("Order Created Date");
202
        affHeaderRow.createCell(8).setCellValue("Promised Shipping Date");
203
        affHeaderRow.createCell(9).setCellValue("Shipping Date");
204
        affHeaderRow.createCell(10).setCellValue("First Delivery Attempt");
5354 anupam.sin 205
        affHeaderRow.createCell(11).setCellValue("Promised Delivery Date");
5428 anupam.sin 206
        affHeaderRow.createCell(12).setCellValue("Expected Delivery Date");
6791 rajveer 207
        affHeaderRow.createCell(13).setCellValue("Expected Courier Delivery Date");
208
        affHeaderRow.createCell(14).setCellValue("RTO Declare date");
209
        affHeaderRow.createCell(15).setCellValue("Return Receive Date");
210
        affHeaderRow.createCell(16).setCellValue("RTO Refund Date");
211
        affHeaderRow.createCell(17).setCellValue("RTO Reship Date");
5354 anupam.sin 212
 
6791 rajveer 213
        affHeaderRow.createCell(18).setCellValue("Shipping to Return Time");
214
        affHeaderRow.createCell(19).setCellValue("First Attempt Delay");
5428 anupam.sin 215
 
6791 rajveer 216
        for (int i=0; i<20 ;i++) {
4801 anupam.sin 217
            affHeaderRow.getCell(i).setCellStyle(style);
218
        }
219
 
220
        try {
221
            TransactionClient tc = new TransactionClient();
222
            orders = tc.getClient().getAllOrders(rtoStatuses, startDate.getTime(), endDate.getTime(), 0);
223
        } catch (TransactionServiceException e) {
224
            // TODO Auto-generated catch block
225
            e.printStackTrace();
226
        } catch (TException e) {
227
            // TODO Auto-generated catch block
228
            e.printStackTrace();
229
        }
230
 
231
        for(Order order : orders) {
232
            long diffDays = -99;
233
            affSerialNo++;
234
            Row commContentRow = sheet1.createRow(affSerialNo);
5428 anupam.sin 235
 
4801 anupam.sin 236
            commContentRow.createCell(0).setCellValue(order.getId());
5554 rajveer 237
            commContentRow.createCell(1).setCellValue(order.isLogisticsCod() ? "COD" : "PREPAID");
5428 anupam.sin 238
 
239
            List<LineItem> items = order.getLineitems();
240
            String product = items.get(0).getBrand() + " " + items.get(0).getModel_name() + " " + items.get(0).getModel_number();
241
            commContentRow.createCell(2).setCellValue(product);
242
 
243
            commContentRow.createCell(3).setCellValue(order.getAirwaybill_no());
244
            commContentRow.createCell(4).setCellValue(order.getCustomer_pincode());
245
            commContentRow.createCell(5).setCellValue(order.getCustomer_city());
246
            commContentRow.createCell(6).setCellValue(logisticProviderMap.get(order.getLogistics_provider_id()));
247
 
248
            commContentRow.createCell(7).setCellValue(new Date(order.getCreated_timestamp()));
4801 anupam.sin 249
            commContentRow.getCell(7).setCellStyle(dateCellStyle);
5354 anupam.sin 250
 
5428 anupam.sin 251
            commContentRow.createCell(8).setCellValue(new Date(order.getPromised_shipping_time()));
252
            commContentRow.getCell(8).setCellStyle(dateCellStyle);
253
 
254
            commContentRow.createCell(9).setCellValue(new Date(order.getShipping_timestamp()));
4801 anupam.sin 255
            commContentRow.getCell(9).setCellStyle(dateCellStyle);
5354 anupam.sin 256
 
257
            if (order.getFirst_attempt_timestamp() != 0) {
5428 anupam.sin 258
                commContentRow.createCell(10).setCellValue(new Date(order.getFirst_attempt_timestamp()));
259
                commContentRow.getCell(10).setCellStyle(dateCellStyle);
5354 anupam.sin 260
            } else {
261
                commContentRow.createCell(10).setCellValue("N/A");
262
            }
263
 
264
            commContentRow.createCell(11).setCellValue(new Date(order.getPromised_delivery_time()));
4801 anupam.sin 265
            commContentRow.getCell(11).setCellStyle(dateCellStyle);
5428 anupam.sin 266
 
267
            commContentRow.createCell(12).setCellValue(new Date(order.getExpected_delivery_time()));
5354 anupam.sin 268
            commContentRow.getCell(12).setCellStyle(dateCellStyle);
269
 
6791 rajveer 270
            commContentRow.createCell(13).setCellValue(new Date(order.getCourier_delivery_time()));
271
            commContentRow.getCell(13).setCellStyle(dateCellStyle);
272
 
5428 anupam.sin 273
            if (order.getDelivery_timestamp() != 0) {
274
                //When our courier partners declare a shipment as RTO we mark that time as delivered timestamp in our DB.
6791 rajveer 275
                commContentRow.createCell(14).setCellValue(new Date(order.getDelivery_timestamp()));//This is actually RTO Declare date.
5428 anupam.sin 276
                commContentRow.getCell(14).setCellStyle(dateCellStyle);
277
            } else {
278
                commContentRow.createCell(14).setCellValue("N/A");
279
            }
280
 
6791 rajveer 281
            if (order.getReceived_return_timestamp() != 0) {
282
                commContentRow.createCell(15).setCellValue(new Date(order.getReceived_return_timestamp()));
5428 anupam.sin 283
                commContentRow.getCell(15).setCellStyle(dateCellStyle);
284
            } else {
285
                commContentRow.createCell(15).setCellValue("N/A");
286
            }
287
 
6791 rajveer 288
            if (order.getRefund_timestamp() != 0) {
289
                commContentRow.createCell(16).setCellValue(new Date(order.getRefund_timestamp()));
5428 anupam.sin 290
                commContentRow.getCell(16).setCellStyle(dateCellStyle);
291
            } else {
292
                commContentRow.createCell(16).setCellValue("N/A");
293
            }
294
 
6791 rajveer 295
            if (order.getReship_timestamp() != 0) {
296
                commContentRow.createCell(17).setCellValue(new Date(order.getReship_timestamp()));
297
                commContentRow.getCell(17).setCellStyle(dateCellStyle);
298
            } else {
299
                commContentRow.createCell(17).setCellValue("N/A");
300
            }
5428 anupam.sin 301
 
302
            if (order.getReceived_return_timestamp() != 0) {
303
                diffDays = GetDelayinDays(order.getReceived_return_timestamp(), order.getShipping_timestamp());
6791 rajveer 304
                commContentRow.createCell(18).setCellValue(diffDays);
5428 anupam.sin 305
            } else {
6791 rajveer 306
                commContentRow.createCell(18).setCellValue("N/A");
5428 anupam.sin 307
            }
308
 
309
            if (order.getFirst_attempt_timestamp() != 0) {
6791 rajveer 310
                diffDays = GetDelayinDays(order.getFirst_attempt_timestamp(), order.getCourier_delivery_time());
311
                commContentRow.createCell(19).setCellValue(diffDays);
5428 anupam.sin 312
            } else {
6791 rajveer 313
                commContentRow.createCell(19).setCellValue("N/A");
5428 anupam.sin 314
            }
4801 anupam.sin 315
        }
6791 rajveer 316
        for (int i = 0; i<20; i++) {
4801 anupam.sin 317
            sheet1.autoSizeColumn(i);
318
        }
319
    }
320
 
321
    private void createDeliveredSheet(Workbook wb, 
322
            CellStyle style,
323
            CellStyle dateCellStyle) {
324
        // Summary SHEET
325
        Sheet sheet2 = wb.createSheet("Delivered");
326
        short affSerialNo = 0;
327
 
328
        DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
329
 
330
        Row affTitleRow = sheet2.createRow(affSerialNo ++);
331
        Cell affTitleCell = affTitleRow.createCell(0);
332
        affTitleCell.setCellValue("Courier Performance Report : Delivered Orders");
333
        affTitleCell.setCellStyle(style);
334
        sheet2.addMergedRegion(new CellRangeAddress(0, 0, 0, 6));
335
 
336
        sheet2.createRow(affSerialNo ++);
337
 
338
        Row affDateRangeRow = sheet2.createRow(affSerialNo ++);
339
        Cell affDateRangeCell = affDateRangeRow.createCell(0);
340
        affDateRangeCell.setCellValue("Date Range : " + df.format(startDate) + " - " + df.format(endDate));
341
        affDateRangeCell.setCellStyle(style);
342
        sheet2.addMergedRegion(new CellRangeAddress(3, 3, 0, 6));
343
 
344
        sheet2.createRow(affSerialNo ++);sheet2.createRow(affSerialNo ++);
345
 
346
        Row affHeaderRow = sheet2.createRow(affSerialNo++);
347
        affHeaderRow.createCell(0).setCellValue("Order Id");
348
        affHeaderRow.createCell(1).setCellValue("Payment Type");
5428 anupam.sin 349
        affHeaderRow.createCell(2).setCellValue("Product Name");
350
        affHeaderRow.createCell(3).setCellValue("AWB");
351
        affHeaderRow.createCell(4).setCellValue("Pincode");
352
        affHeaderRow.createCell(5).setCellValue("City");
353
        affHeaderRow.createCell(6).setCellValue("Logistics Provider");
354
        affHeaderRow.createCell(7).setCellValue("Order Created Date");
355
        affHeaderRow.createCell(8).setCellValue("Promised Shipping Date");
356
        affHeaderRow.createCell(9).setCellValue("Shipping Date");
357
        affHeaderRow.createCell(10).setCellValue("First Delivery Attempt");
358
        affHeaderRow.createCell(11).setCellValue("Promised Delivery Date");
359
        affHeaderRow.createCell(12).setCellValue("Expected Delivery Date");
6791 rajveer 360
        affHeaderRow.createCell(13).setCellValue("Expected Courier Delivery Date");
361
        affHeaderRow.createCell(14).setCellValue("Delivery Date");
5354 anupam.sin 362
 
6791 rajveer 363
        affHeaderRow.createCell(15).setCellValue("Delay");
364
        affHeaderRow.createCell(16).setCellValue("First Attempt Delay");
4801 anupam.sin 365
 
5354 anupam.sin 366
        for (int i=0; i<16 ;i++) {
4801 anupam.sin 367
            affHeaderRow.getCell(i).setCellStyle(style);
368
        }
369
 
370
        try {
371
            TransactionClient tc = new TransactionClient();
372
            List<OrderStatus> deliveredStatuses = new ArrayList<OrderStatus>();
373
            deliveredStatuses.add(OrderStatus.DELIVERY_SUCCESS);
374
            orders = tc.getClient().getAllOrders(deliveredStatuses, startDate.getTime(), endDate.getTime(), 0);
375
        } catch (TransactionServiceException e) {
376
            // TODO Auto-generated catch block
377
            e.printStackTrace();
378
        } catch (TException e) {
379
            // TODO Auto-generated catch block
380
            e.printStackTrace();
381
        }
382
 
383
        for(Order order : orders) {
384
            affSerialNo++;
385
            Row commContentRow = sheet2.createRow(affSerialNo);
5428 anupam.sin 386
 
4801 anupam.sin 387
            commContentRow.createCell(0).setCellValue(order.getId());
5554 rajveer 388
            commContentRow.createCell(1).setCellValue(order.isLogisticsCod() ? "COD" : "PREPAID");
5428 anupam.sin 389
 
390
            List<LineItem> items = order.getLineitems();
391
            String product = items.get(0).getBrand() + " " + items.get(0).getModel_name() + " " + items.get(0).getModel_number();
392
            commContentRow.createCell(2).setCellValue(product);
393
 
394
            commContentRow.createCell(3).setCellValue(order.getAirwaybill_no());
395
            commContentRow.createCell(4).setCellValue(order.getCustomer_pincode());
396
            commContentRow.createCell(5).setCellValue(order.getCustomer_city());
397
            commContentRow.createCell(6).setCellValue(logisticProviderMap.get(order.getLogistics_provider_id()));
398
 
399
            commContentRow.createCell(7).setCellValue(new Date(order.getCreated_timestamp()));
4801 anupam.sin 400
            commContentRow.getCell(7).setCellStyle(dateCellStyle);
5354 anupam.sin 401
 
5428 anupam.sin 402
            if (order.getPromised_shipping_time() != 0) {
403
                commContentRow.createCell(8).setCellValue(new Date(order.getPromised_shipping_time()));
404
                commContentRow.getCell(8).setCellStyle(dateCellStyle);
405
            } else {
406
                commContentRow.createCell(8).setCellValue("N/A");
407
            }
408
 
409
            commContentRow.createCell(9).setCellValue(new Date(order.getShipping_timestamp()));
4801 anupam.sin 410
            commContentRow.getCell(9).setCellStyle(dateCellStyle);
5354 anupam.sin 411
 
5428 anupam.sin 412
            if (order.getFirst_attempt_timestamp() != 0) {
413
                commContentRow.createCell(10).setCellValue(new Date(order.getFirst_attempt_timestamp()));
414
                commContentRow.getCell(10).setCellStyle(dateCellStyle);
415
            } else {
416
                commContentRow.createCell(10).setCellValue("N/A");
417
            }
5354 anupam.sin 418
 
419
            commContentRow.createCell(11).setCellValue(new Date(order.getPromised_delivery_time()));
4801 anupam.sin 420
            commContentRow.getCell(11).setCellStyle(dateCellStyle);
5354 anupam.sin 421
 
5428 anupam.sin 422
            if (order.getDelivery_timestamp() != 0) { 
423
                commContentRow.createCell(12).setCellValue(new Date(order.getExpected_delivery_time()));
424
                commContentRow.getCell(12).setCellStyle(dateCellStyle);
425
            } else {
426
                commContentRow.createCell(12).setCellValue("N/A");
427
            }
5354 anupam.sin 428
 
6791 rajveer 429
            if (order.getDelivery_timestamp() != 0) { 
430
                commContentRow.createCell(13).setCellValue(new Date(order.getCourier_delivery_time()));
5428 anupam.sin 431
                commContentRow.getCell(13).setCellStyle(dateCellStyle);
432
            } else {
433
                commContentRow.createCell(13).setCellValue("N/A");
434
            }
6791 rajveer 435
 
436
            if (order.getDelivery_timestamp() != 0) {    
437
                commContentRow.createCell(14).setCellValue(new Date(order.getDelivery_timestamp()));
438
                commContentRow.getCell(14).setCellStyle(dateCellStyle);
439
            } else {
440
                commContentRow.createCell(14).setCellValue("N/A");
441
            }
5428 anupam.sin 442
 
443
 
444
            //We are subtracting delay due to shipping from delay in delivery as it was not courier's
445
            //fault that the shipment was delayed
446
 
447
            long delayInShipping = 0;
6791 rajveer 448
            long diffDays = GetDelayinDays(order.getDelivery_timestamp(), order.getCourier_delivery_time());
5428 anupam.sin 449
 
450
            if (order.getPromised_shipping_time() != 0) {
451
                delayInShipping = GetDelayinDays(order.getShipping_timestamp(), order.getPromised_shipping_time());
6791 rajveer 452
                commContentRow.createCell(15).setCellValue(diffDays - delayInShipping);
5428 anupam.sin 453
            } else {
6791 rajveer 454
                commContentRow.createCell(15).setCellValue(diffDays);
5428 anupam.sin 455
            }
456
 
6791 rajveer 457
            diffDays = GetDelayinDays(order.getFirst_attempt_timestamp(), order.getCourier_delivery_time());
5428 anupam.sin 458
 
459
            if (order.getFirst_attempt_timestamp() != 0) { 
460
                if (order.getPromised_shipping_time() != 0) {
461
                    delayInShipping = GetDelayinDays(order.getShipping_timestamp(), order.getPromised_shipping_time());
6791 rajveer 462
                    commContentRow.createCell(16).setCellValue(diffDays - delayInShipping);
5428 anupam.sin 463
                }
464
            } else { 
6791 rajveer 465
                commContentRow.createCell(16).setCellValue("N/A");
5428 anupam.sin 466
            }
4801 anupam.sin 467
        }
6791 rajveer 468
        for (int i = 0; i<17; i++) {
4801 anupam.sin 469
            sheet2.autoSizeColumn(i);
470
        }
471
    }
5354 anupam.sin 472
 
473
    long GetDelayinDays(long actualDate, long expectedDate) {
474
 
475
        Calendar actualTime = Calendar.getInstance();
476
        Calendar expectedTime = Calendar.getInstance();
477
        long millisInDays = 24 * 60 * 60 * 1000;
478
 
479
        actualTime.setTimeInMillis(actualDate);
480
        expectedTime.setTimeInMillis(expectedDate);
481
 
482
        long actualTimeInMillis = actualTime.getTimeInMillis();
483
        long expectedTimeInMillis = expectedTime.getTimeInMillis();
484
        long diff = actualTimeInMillis - expectedTimeInMillis;
485
        long diffDays = diff / millisInDays;
486
 
487
        return diffDays;
488
    }
4801 anupam.sin 489
 
490
    public List<OrderStatus> getRtoStatuses() {
491
        return rtoStatuses;
492
    }
493
 
494
    public void setRtoStatuses(List<OrderStatus> rtoStatuses) {
495
        this.rtoStatuses = rtoStatuses;
496
    }
497
 
498
    public void setOrders(List<Order> orders) {
499
        this.orders = orders;
500
    }
501
 
502
    public List<Order> getOrders() {
503
        return orders;
504
    }
505
 
506
    @Override
507
    public void setServletResponse(HttpServletResponse res) {
508
        this.response = res;
509
    }
510
 
511
    @Override
512
    public void setServletRequest(HttpServletRequest req) {
513
        this.request = req;
514
        this.session = req.getSession();
515
    }
516
 
517
    public String getErrorMsg() {
518
        return errorMsg;
519
    }
520
 
521
    public void setErrorMsg(String errorMsg) {
522
        this.errorMsg = errorMsg;
523
    }
524
 
525
    public Date getStartDate() {
526
        return startDate;
527
    }
528
 
529
    public void setStartDate(Date startDate) {
530
        this.startDate = startDate;
531
    }
532
 
533
    public Date getEndDate() {
534
        return endDate;
535
    }
536
 
537
    public void setEndDate(Date endDate) {
538
        this.endDate = endDate;
539
    }
540
}