Subversion Repositories SmartDukaan

Rev

Rev 6791 | 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
 
7217 rajveer 140
 
141
    private Date getCorrectedDate(Date uf){
142
    	Calendar cal = Calendar.getInstance();  
143
        cal.setTime(uf);	
144
        cal.set(Calendar.HOUR_OF_DAY, 0);  
145
        cal.set(Calendar.MINUTE, 0);  
146
        cal.set(Calendar.SECOND, 0);  
147
        cal.set(Calendar.MILLISECOND, 0);
148
        return cal.getTime();
149
    }
150
 
151
 
152
 
153
 
4801 anupam.sin 154
    private ByteArrayOutputStream getSpreadSheetData() {
155
        ByteArrayOutputStream baosXLS = new ByteArrayOutputStream();
156
 
157
        Workbook wb = new HSSFWorkbook();
158
 
159
        Font font = wb.createFont();
160
        font.setBoldweight(Font.BOLDWEIGHT_BOLD);
161
        CellStyle style = wb.createCellStyle();
162
        style.setFont(font);
163
 
164
        CreationHelper createHelper = wb.getCreationHelper();
165
        CellStyle dateCellStyle = wb.createCellStyle();
166
        dateCellStyle.setDataFormat(createHelper.createDataFormat().getFormat("DD/MM/YYYY"));
167
 
168
        createRtoSheet(wb, style, dateCellStyle);
169
        createDeliveredSheet(wb, style, dateCellStyle);
170
 
171
        // Write the workbook to the output stream
172
        try {
173
            wb.write(baosXLS);
174
            baosXLS.close();
175
        } catch (IOException e) {
176
            log.error("Unable to get the byte array for the affiliate report", e);
177
        }       
178
        return baosXLS;
179
    }
180
 
181
    private void createRtoSheet(Workbook wb, 
182
                                       CellStyle style,
183
                                       CellStyle dateCellStyle) {
184
        // Summary SHEET
185
        Sheet sheet1 = wb.createSheet("RTO");
186
        short affSerialNo = 0;
187
 
188
        DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
189
 
190
        Row affTitleRow = sheet1.createRow(affSerialNo ++);
191
        Cell affTitleCell = affTitleRow.createCell(0);
192
        affTitleCell.setCellValue("Courier Performance Report : RTO Orders");
193
        affTitleCell.setCellStyle(style);
194
        sheet1.addMergedRegion(new CellRangeAddress(0, 0, 0, 6));
195
 
196
        sheet1.createRow(affSerialNo ++);
197
 
198
        Row affDateRangeRow = sheet1.createRow(affSerialNo ++);
199
        Cell affDateRangeCell = affDateRangeRow.createCell(0);
200
        affDateRangeCell.setCellValue("Date Range : " + df.format(startDate) + " - " + df.format(endDate));
201
        affDateRangeCell.setCellStyle(style);
202
        sheet1.addMergedRegion(new CellRangeAddress(3, 3, 0, 6));
203
 
204
        sheet1.createRow(affSerialNo ++);sheet1.createRow(affSerialNo ++);
205
 
206
        Row affHeaderRow = sheet1.createRow(affSerialNo++);
5428 anupam.sin 207
 
4801 anupam.sin 208
        affHeaderRow.createCell(0).setCellValue("Order Id");
209
        affHeaderRow.createCell(1).setCellValue("Payment Type");
5428 anupam.sin 210
        affHeaderRow.createCell(2).setCellValue("Product Name");
211
        affHeaderRow.createCell(3).setCellValue("AWB");
212
        affHeaderRow.createCell(4).setCellValue("Pincode");
213
        affHeaderRow.createCell(5).setCellValue("City");
214
        affHeaderRow.createCell(6).setCellValue("Logistics Provider");
215
        affHeaderRow.createCell(7).setCellValue("Order Created Date");
216
        affHeaderRow.createCell(8).setCellValue("Promised Shipping Date");
217
        affHeaderRow.createCell(9).setCellValue("Shipping Date");
218
        affHeaderRow.createCell(10).setCellValue("First Delivery Attempt");
5354 anupam.sin 219
        affHeaderRow.createCell(11).setCellValue("Promised Delivery Date");
5428 anupam.sin 220
        affHeaderRow.createCell(12).setCellValue("Expected Delivery Date");
6791 rajveer 221
        affHeaderRow.createCell(13).setCellValue("Expected Courier Delivery Date");
222
        affHeaderRow.createCell(14).setCellValue("RTO Declare date");
223
        affHeaderRow.createCell(15).setCellValue("Return Receive Date");
224
        affHeaderRow.createCell(16).setCellValue("RTO Refund Date");
225
        affHeaderRow.createCell(17).setCellValue("RTO Reship Date");
5354 anupam.sin 226
 
6791 rajveer 227
        affHeaderRow.createCell(18).setCellValue("Shipping to Return Time");
228
        affHeaderRow.createCell(19).setCellValue("First Attempt Delay");
5428 anupam.sin 229
 
6791 rajveer 230
        for (int i=0; i<20 ;i++) {
4801 anupam.sin 231
            affHeaderRow.getCell(i).setCellStyle(style);
232
        }
233
 
234
        try {
235
            TransactionClient tc = new TransactionClient();
236
            orders = tc.getClient().getAllOrders(rtoStatuses, startDate.getTime(), endDate.getTime(), 0);
237
        } catch (TransactionServiceException e) {
238
            // TODO Auto-generated catch block
239
            e.printStackTrace();
240
        } catch (TException e) {
241
            // TODO Auto-generated catch block
242
            e.printStackTrace();
243
        }
244
 
245
        for(Order order : orders) {
246
            long diffDays = -99;
247
            affSerialNo++;
248
            Row commContentRow = sheet1.createRow(affSerialNo);
5428 anupam.sin 249
 
4801 anupam.sin 250
            commContentRow.createCell(0).setCellValue(order.getId());
5554 rajveer 251
            commContentRow.createCell(1).setCellValue(order.isLogisticsCod() ? "COD" : "PREPAID");
5428 anupam.sin 252
 
253
            List<LineItem> items = order.getLineitems();
254
            String product = items.get(0).getBrand() + " " + items.get(0).getModel_name() + " " + items.get(0).getModel_number();
255
            commContentRow.createCell(2).setCellValue(product);
256
 
257
            commContentRow.createCell(3).setCellValue(order.getAirwaybill_no());
258
            commContentRow.createCell(4).setCellValue(order.getCustomer_pincode());
259
            commContentRow.createCell(5).setCellValue(order.getCustomer_city());
260
            commContentRow.createCell(6).setCellValue(logisticProviderMap.get(order.getLogistics_provider_id()));
261
 
7217 rajveer 262
            commContentRow.createCell(7).setCellValue(getCorrectedDate(new Date(order.getCreated_timestamp())));
4801 anupam.sin 263
            commContentRow.getCell(7).setCellStyle(dateCellStyle);
5354 anupam.sin 264
 
7217 rajveer 265
            commContentRow.createCell(8).setCellValue(getCorrectedDate(new Date(order.getPromised_shipping_time())));
5428 anupam.sin 266
            commContentRow.getCell(8).setCellStyle(dateCellStyle);
267
 
7217 rajveer 268
            commContentRow.createCell(9).setCellValue(getCorrectedDate(new Date(order.getShipping_timestamp())));
4801 anupam.sin 269
            commContentRow.getCell(9).setCellStyle(dateCellStyle);
5354 anupam.sin 270
 
271
            if (order.getFirst_attempt_timestamp() != 0) {
7217 rajveer 272
                commContentRow.createCell(10).setCellValue(getCorrectedDate(new Date(order.getFirst_attempt_timestamp())));
5428 anupam.sin 273
                commContentRow.getCell(10).setCellStyle(dateCellStyle);
5354 anupam.sin 274
            } else {
275
                commContentRow.createCell(10).setCellValue("N/A");
276
            }
277
 
7217 rajveer 278
            commContentRow.createCell(11).setCellValue(getCorrectedDate(new Date(order.getPromised_delivery_time())));
4801 anupam.sin 279
            commContentRow.getCell(11).setCellStyle(dateCellStyle);
5428 anupam.sin 280
 
7217 rajveer 281
            commContentRow.createCell(12).setCellValue(getCorrectedDate(new Date(order.getExpected_delivery_time())));
5354 anupam.sin 282
            commContentRow.getCell(12).setCellStyle(dateCellStyle);
283
 
7217 rajveer 284
            commContentRow.createCell(13).setCellValue(getCorrectedDate(new Date(order.getCourier_delivery_time())));
6791 rajveer 285
            commContentRow.getCell(13).setCellStyle(dateCellStyle);
286
 
5428 anupam.sin 287
            if (order.getDelivery_timestamp() != 0) {
288
                //When our courier partners declare a shipment as RTO we mark that time as delivered timestamp in our DB.
7217 rajveer 289
                commContentRow.createCell(14).setCellValue(getCorrectedDate(new Date(order.getDelivery_timestamp())));//This is actually RTO Declare date.
5428 anupam.sin 290
                commContentRow.getCell(14).setCellStyle(dateCellStyle);
291
            } else {
292
                commContentRow.createCell(14).setCellValue("N/A");
293
            }
294
 
6791 rajveer 295
            if (order.getReceived_return_timestamp() != 0) {
7217 rajveer 296
                commContentRow.createCell(15).setCellValue(getCorrectedDate(new Date(order.getReceived_return_timestamp())));
5428 anupam.sin 297
                commContentRow.getCell(15).setCellStyle(dateCellStyle);
298
            } else {
299
                commContentRow.createCell(15).setCellValue("N/A");
300
            }
301
 
6791 rajveer 302
            if (order.getRefund_timestamp() != 0) {
7217 rajveer 303
                commContentRow.createCell(16).setCellValue(getCorrectedDate(new Date(order.getRefund_timestamp())));
5428 anupam.sin 304
                commContentRow.getCell(16).setCellStyle(dateCellStyle);
305
            } else {
306
                commContentRow.createCell(16).setCellValue("N/A");
307
            }
308
 
6791 rajveer 309
            if (order.getReship_timestamp() != 0) {
7217 rajveer 310
                commContentRow.createCell(17).setCellValue(getCorrectedDate(new Date(order.getReship_timestamp())));
6791 rajveer 311
                commContentRow.getCell(17).setCellStyle(dateCellStyle);
312
            } else {
313
                commContentRow.createCell(17).setCellValue("N/A");
314
            }
5428 anupam.sin 315
 
316
            if (order.getReceived_return_timestamp() != 0) {
317
                diffDays = GetDelayinDays(order.getReceived_return_timestamp(), order.getShipping_timestamp());
6791 rajveer 318
                commContentRow.createCell(18).setCellValue(diffDays);
5428 anupam.sin 319
            } else {
6791 rajveer 320
                commContentRow.createCell(18).setCellValue("N/A");
5428 anupam.sin 321
            }
322
 
323
            if (order.getFirst_attempt_timestamp() != 0) {
6791 rajveer 324
                diffDays = GetDelayinDays(order.getFirst_attempt_timestamp(), order.getCourier_delivery_time());
325
                commContentRow.createCell(19).setCellValue(diffDays);
5428 anupam.sin 326
            } else {
6791 rajveer 327
                commContentRow.createCell(19).setCellValue("N/A");
5428 anupam.sin 328
            }
4801 anupam.sin 329
        }
6791 rajveer 330
        for (int i = 0; i<20; i++) {
4801 anupam.sin 331
            sheet1.autoSizeColumn(i);
332
        }
333
    }
334
 
335
    private void createDeliveredSheet(Workbook wb, 
336
            CellStyle style,
337
            CellStyle dateCellStyle) {
338
        // Summary SHEET
339
        Sheet sheet2 = wb.createSheet("Delivered");
340
        short affSerialNo = 0;
341
 
342
        DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
343
 
344
        Row affTitleRow = sheet2.createRow(affSerialNo ++);
345
        Cell affTitleCell = affTitleRow.createCell(0);
346
        affTitleCell.setCellValue("Courier Performance Report : Delivered Orders");
347
        affTitleCell.setCellStyle(style);
348
        sheet2.addMergedRegion(new CellRangeAddress(0, 0, 0, 6));
349
 
350
        sheet2.createRow(affSerialNo ++);
351
 
352
        Row affDateRangeRow = sheet2.createRow(affSerialNo ++);
353
        Cell affDateRangeCell = affDateRangeRow.createCell(0);
354
        affDateRangeCell.setCellValue("Date Range : " + df.format(startDate) + " - " + df.format(endDate));
355
        affDateRangeCell.setCellStyle(style);
356
        sheet2.addMergedRegion(new CellRangeAddress(3, 3, 0, 6));
357
 
358
        sheet2.createRow(affSerialNo ++);sheet2.createRow(affSerialNo ++);
359
 
360
        Row affHeaderRow = sheet2.createRow(affSerialNo++);
361
        affHeaderRow.createCell(0).setCellValue("Order Id");
362
        affHeaderRow.createCell(1).setCellValue("Payment Type");
5428 anupam.sin 363
        affHeaderRow.createCell(2).setCellValue("Product Name");
364
        affHeaderRow.createCell(3).setCellValue("AWB");
365
        affHeaderRow.createCell(4).setCellValue("Pincode");
366
        affHeaderRow.createCell(5).setCellValue("City");
367
        affHeaderRow.createCell(6).setCellValue("Logistics Provider");
368
        affHeaderRow.createCell(7).setCellValue("Order Created Date");
369
        affHeaderRow.createCell(8).setCellValue("Promised Shipping Date");
370
        affHeaderRow.createCell(9).setCellValue("Shipping Date");
371
        affHeaderRow.createCell(10).setCellValue("First Delivery Attempt");
372
        affHeaderRow.createCell(11).setCellValue("Promised Delivery Date");
373
        affHeaderRow.createCell(12).setCellValue("Expected Delivery Date");
6791 rajveer 374
        affHeaderRow.createCell(13).setCellValue("Expected Courier Delivery Date");
375
        affHeaderRow.createCell(14).setCellValue("Delivery Date");
5354 anupam.sin 376
 
6791 rajveer 377
        affHeaderRow.createCell(15).setCellValue("Delay");
378
        affHeaderRow.createCell(16).setCellValue("First Attempt Delay");
4801 anupam.sin 379
 
5354 anupam.sin 380
        for (int i=0; i<16 ;i++) {
4801 anupam.sin 381
            affHeaderRow.getCell(i).setCellStyle(style);
382
        }
383
 
384
        try {
385
            TransactionClient tc = new TransactionClient();
386
            List<OrderStatus> deliveredStatuses = new ArrayList<OrderStatus>();
387
            deliveredStatuses.add(OrderStatus.DELIVERY_SUCCESS);
388
            orders = tc.getClient().getAllOrders(deliveredStatuses, startDate.getTime(), endDate.getTime(), 0);
389
        } catch (TransactionServiceException e) {
390
            // TODO Auto-generated catch block
391
            e.printStackTrace();
392
        } catch (TException e) {
393
            // TODO Auto-generated catch block
394
            e.printStackTrace();
395
        }
396
 
397
        for(Order order : orders) {
398
            affSerialNo++;
399
            Row commContentRow = sheet2.createRow(affSerialNo);
5428 anupam.sin 400
 
4801 anupam.sin 401
            commContentRow.createCell(0).setCellValue(order.getId());
5554 rajveer 402
            commContentRow.createCell(1).setCellValue(order.isLogisticsCod() ? "COD" : "PREPAID");
5428 anupam.sin 403
 
404
            List<LineItem> items = order.getLineitems();
405
            String product = items.get(0).getBrand() + " " + items.get(0).getModel_name() + " " + items.get(0).getModel_number();
406
            commContentRow.createCell(2).setCellValue(product);
407
 
408
            commContentRow.createCell(3).setCellValue(order.getAirwaybill_no());
409
            commContentRow.createCell(4).setCellValue(order.getCustomer_pincode());
410
            commContentRow.createCell(5).setCellValue(order.getCustomer_city());
411
            commContentRow.createCell(6).setCellValue(logisticProviderMap.get(order.getLogistics_provider_id()));
412
 
7217 rajveer 413
            commContentRow.createCell(7).setCellValue(getCorrectedDate(new Date(order.getCreated_timestamp())));
4801 anupam.sin 414
            commContentRow.getCell(7).setCellStyle(dateCellStyle);
5354 anupam.sin 415
 
5428 anupam.sin 416
            if (order.getPromised_shipping_time() != 0) {
7217 rajveer 417
                commContentRow.createCell(8).setCellValue(getCorrectedDate(new Date(order.getPromised_shipping_time())));
5428 anupam.sin 418
                commContentRow.getCell(8).setCellStyle(dateCellStyle);
419
            } else {
420
                commContentRow.createCell(8).setCellValue("N/A");
421
            }
422
 
7217 rajveer 423
            commContentRow.createCell(9).setCellValue(getCorrectedDate(new Date(order.getShipping_timestamp())));
4801 anupam.sin 424
            commContentRow.getCell(9).setCellStyle(dateCellStyle);
5354 anupam.sin 425
 
5428 anupam.sin 426
            if (order.getFirst_attempt_timestamp() != 0) {
7217 rajveer 427
                commContentRow.createCell(10).setCellValue(getCorrectedDate(new Date(order.getFirst_attempt_timestamp())));
5428 anupam.sin 428
                commContentRow.getCell(10).setCellStyle(dateCellStyle);
429
            } else {
430
                commContentRow.createCell(10).setCellValue("N/A");
431
            }
5354 anupam.sin 432
 
7217 rajveer 433
            commContentRow.createCell(11).setCellValue(getCorrectedDate(new Date(order.getPromised_delivery_time())));
4801 anupam.sin 434
            commContentRow.getCell(11).setCellStyle(dateCellStyle);
5354 anupam.sin 435
 
5428 anupam.sin 436
            if (order.getDelivery_timestamp() != 0) { 
7217 rajveer 437
                commContentRow.createCell(12).setCellValue(getCorrectedDate(new Date(order.getExpected_delivery_time())));
5428 anupam.sin 438
                commContentRow.getCell(12).setCellStyle(dateCellStyle);
439
            } else {
440
                commContentRow.createCell(12).setCellValue("N/A");
441
            }
5354 anupam.sin 442
 
6791 rajveer 443
            if (order.getDelivery_timestamp() != 0) { 
7217 rajveer 444
                commContentRow.createCell(13).setCellValue(getCorrectedDate(new Date(order.getCourier_delivery_time())));
5428 anupam.sin 445
                commContentRow.getCell(13).setCellStyle(dateCellStyle);
446
            } else {
447
                commContentRow.createCell(13).setCellValue("N/A");
448
            }
6791 rajveer 449
 
450
            if (order.getDelivery_timestamp() != 0) {    
7217 rajveer 451
                commContentRow.createCell(14).setCellValue(getCorrectedDate(new Date(order.getDelivery_timestamp())));
6791 rajveer 452
                commContentRow.getCell(14).setCellStyle(dateCellStyle);
453
            } else {
454
                commContentRow.createCell(14).setCellValue("N/A");
455
            }
5428 anupam.sin 456
 
457
 
458
            //We are subtracting delay due to shipping from delay in delivery as it was not courier's
459
            //fault that the shipment was delayed
460
 
461
            long delayInShipping = 0;
6791 rajveer 462
            long diffDays = GetDelayinDays(order.getDelivery_timestamp(), order.getCourier_delivery_time());
5428 anupam.sin 463
 
464
            if (order.getPromised_shipping_time() != 0) {
465
                delayInShipping = GetDelayinDays(order.getShipping_timestamp(), order.getPromised_shipping_time());
6791 rajveer 466
                commContentRow.createCell(15).setCellValue(diffDays - delayInShipping);
5428 anupam.sin 467
            } else {
6791 rajveer 468
                commContentRow.createCell(15).setCellValue(diffDays);
5428 anupam.sin 469
            }
470
 
6791 rajveer 471
            diffDays = GetDelayinDays(order.getFirst_attempt_timestamp(), order.getCourier_delivery_time());
5428 anupam.sin 472
 
473
            if (order.getFirst_attempt_timestamp() != 0) { 
474
                if (order.getPromised_shipping_time() != 0) {
475
                    delayInShipping = GetDelayinDays(order.getShipping_timestamp(), order.getPromised_shipping_time());
6791 rajveer 476
                    commContentRow.createCell(16).setCellValue(diffDays - delayInShipping);
5428 anupam.sin 477
                }
478
            } else { 
6791 rajveer 479
                commContentRow.createCell(16).setCellValue("N/A");
5428 anupam.sin 480
            }
4801 anupam.sin 481
        }
6791 rajveer 482
        for (int i = 0; i<17; i++) {
4801 anupam.sin 483
            sheet2.autoSizeColumn(i);
484
        }
485
    }
5354 anupam.sin 486
 
487
    long GetDelayinDays(long actualDate, long expectedDate) {
488
 
489
        Calendar actualTime = Calendar.getInstance();
490
        Calendar expectedTime = Calendar.getInstance();
491
        long millisInDays = 24 * 60 * 60 * 1000;
492
 
493
        actualTime.setTimeInMillis(actualDate);
494
        expectedTime.setTimeInMillis(expectedDate);
495
 
496
        long actualTimeInMillis = actualTime.getTimeInMillis();
497
        long expectedTimeInMillis = expectedTime.getTimeInMillis();
498
        long diff = actualTimeInMillis - expectedTimeInMillis;
499
        long diffDays = diff / millisInDays;
500
 
501
        return diffDays;
502
    }
4801 anupam.sin 503
 
504
    public List<OrderStatus> getRtoStatuses() {
505
        return rtoStatuses;
506
    }
507
 
508
    public void setRtoStatuses(List<OrderStatus> rtoStatuses) {
509
        this.rtoStatuses = rtoStatuses;
510
    }
511
 
512
    public void setOrders(List<Order> orders) {
513
        this.orders = orders;
514
    }
515
 
516
    public List<Order> getOrders() {
517
        return orders;
518
    }
519
 
520
    @Override
521
    public void setServletResponse(HttpServletResponse res) {
522
        this.response = res;
523
    }
524
 
525
    @Override
526
    public void setServletRequest(HttpServletRequest req) {
527
        this.request = req;
528
        this.session = req.getSession();
529
    }
530
 
531
    public String getErrorMsg() {
532
        return errorMsg;
533
    }
534
 
535
    public void setErrorMsg(String errorMsg) {
536
        this.errorMsg = errorMsg;
537
    }
538
 
539
    public Date getStartDate() {
540
        return startDate;
541
    }
542
 
543
    public void setStartDate(Date startDate) {
544
        this.startDate = startDate;
545
    }
546
 
547
    public Date getEndDate() {
548
        return endDate;
549
    }
550
 
551
    public void setEndDate(Date endDate) {
552
        this.endDate = endDate;
553
    }
554
}