Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
4600 varun.gupt 1
package in.shop2020.support.controllers;
2
 
4734 varun.gupt 3
import in.shop2020.logistics.LogisticsServiceException;
4
import in.shop2020.logistics.Provider;
4600 varun.gupt 5
import in.shop2020.model.v1.catalog.InventoryService.Client;
6
import in.shop2020.model.v1.catalog.Vendor;
7
import in.shop2020.model.v1.order.LineItem;
8
import in.shop2020.model.v1.order.Order;
4734 varun.gupt 9
import in.shop2020.model.v1.order.OrderStatus;
5020 varun.gupt 10
import in.shop2020.model.v1.order.OrderStatusGroups;
4600 varun.gupt 11
import in.shop2020.model.v1.order.PaymentSettlement;
12
import in.shop2020.model.v1.order.Transaction;
13
import in.shop2020.model.v1.order.TransactionServiceException;
14
import in.shop2020.payments.Payment;
15
import in.shop2020.payments.PaymentException;
16
import in.shop2020.payments.PaymentGateway;
17
import in.shop2020.thrift.clients.CatalogClient;
4734 varun.gupt 18
import in.shop2020.thrift.clients.LogisticsClient;
4600 varun.gupt 19
import in.shop2020.thrift.clients.PaymentClient;
20
import in.shop2020.thrift.clients.TransactionClient;
21
 
5020 varun.gupt 22
import java.io.ByteArrayOutputStream;
23
import java.io.File;
24
import java.io.FileInputStream;
25
import java.io.FileNotFoundException;
26
import java.io.IOException;
27
import java.text.DateFormat;
28
import java.text.ParseException;
29
import java.text.SimpleDateFormat;
30
import java.util.ArrayList;
31
import java.util.Date;
32
import java.util.HashMap;
5189 varun.gupt 33
import java.util.LinkedList;
5020 varun.gupt 34
import java.util.List;
35
import java.util.Map;
36
 
4600 varun.gupt 37
import javax.servlet.ServletContext;
38
import javax.servlet.ServletOutputStream;
39
import javax.servlet.http.HttpServletRequest;
40
import javax.servlet.http.HttpServletResponse;
41
import javax.servlet.http.HttpSession;
42
 
5189 varun.gupt 43
import org.apache.commons.io.IOUtils;
4600 varun.gupt 44
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
45
import org.apache.poi.ss.usermodel.Cell;
46
import org.apache.poi.ss.usermodel.CellStyle;
47
import org.apache.poi.ss.usermodel.Font;
48
import org.apache.poi.ss.usermodel.Row;
49
import org.apache.poi.ss.usermodel.Sheet;
50
import org.apache.poi.ss.usermodel.Workbook;
51
import org.apache.poi.ss.util.CellRangeAddress;
5020 varun.gupt 52
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
4600 varun.gupt 53
import org.apache.struts2.interceptor.ServletRequestAware;
54
import org.apache.struts2.interceptor.ServletResponseAware;
55
import org.apache.struts2.rest.DefaultHttpHeaders;
56
import org.apache.struts2.rest.HttpHeaders;
57
import org.apache.struts2.util.ServletContextAware;
4715 varun.gupt 58
import org.apache.thrift.TApplicationException;
4600 varun.gupt 59
import org.apache.thrift.TException;
60
import org.apache.thrift.transport.TTransportException;
61
import org.slf4j.Logger;
62
import org.slf4j.LoggerFactory;
63
 
4715 varun.gupt 64
import com.opensymphony.xwork2.ValidationAwareSupport;
65
 
4600 varun.gupt 66
/**
67
 * @author Varun Gupta
68
 * @description: This class handles web requests to generate vendor specific reconciliation reports
69
 *               for given vendor for a given date range
70
 */
4745 varun.gupt 71
//
4715 varun.gupt 72
//@InterceptorRefs({
73
//    @InterceptorRef("defaultStack"),
74
//    @InterceptorRef("login")
75
//})
76
//@Results({
77
//    @Result(name="authfail", type="redirectAction", params = {"actionName" , "reports"})
78
//})
79
public class VendorReconciliationController extends ValidationAwareSupport implements ServletRequestAware, ServletResponseAware, ServletContextAware {
4600 varun.gupt 80
 
81
    private static Logger logger = LoggerFactory.getLogger(VendorReconciliationController.class);
82
 
83
	private enum OrderReportColumn {
84
	    ORDER_ID(0),
85
	    ORDER_DATE(1),
86
		BILLING_NUMBER(2),
87
		BILLING_DATE(3),
88
		DELIVERY_DATE(4),
89
		SETTLEMENT_DATE(5),
90
		CURRENT_STATUS(6),
4745 varun.gupt 91
		PAYMENT_STATUS(7),
4600 varun.gupt 92
		BRAND(7),
93
		MODEL_NAME(8),
94
		MODEL_NUMBER(9),
95
		COLOR(10),
96
		QUANTITY(11),
97
		UNIT_TRANSFER_PRICE(12),
98
		UNIT_SELLING_PRICE(13),
99
		TOTAL_TRANSFER_PRICE(14),
100
		TOTAL_SELLING_PRICE(15),
5020 varun.gupt 101
		PAYMENT_TYPE(16),
102
		PAYMENT_ID(17),
103
		COUPON_CODE(18),
104
		SERVICE_TAX(19),
105
		OTHER_CHARGES(20),
106
		NET_COLLECTION(21),
107
	    REFUND(22),
108
	    FINAL_AMOUNT(23),
109
	    IS_RESHIPED_ORDER(24);
4600 varun.gupt 110
//		COUPON_CATEGORY(19),
111
//		DISCOUNT(20),
112
 
113
		private int value;
114
 
115
		OrderReportColumn(int value) {
116
			this.value = value;
117
		}
118
		public int getValue(){
119
			return this.value;
120
		}
121
	}
122
 
123
	private enum OrderMismatchColumn	{
124
		ORDER_ID(0),
125
		EXPECTED_COLLECTION(1),
126
		ACTUAL_COLLECTION(2);
127
 
128
		private int value;
129
 
130
		OrderMismatchColumn(int value) {
131
			this.value = value;
132
		}
133
		public int getValue(){
134
			return this.value;
135
		}
136
	}
137
 
138
	private HttpServletRequest request;
139
	private HttpServletResponse response;
140
	private ServletContext context;
141
    private HttpSession session;
142
	private List<Vendor> vendors;
5020 varun.gupt 143
	private Map<Long, String> codProviders = new HashMap<Long, String>();
144
	private Map<Long, String> paymentGateways = new HashMap<Long, String>();
145
 
4600 varun.gupt 146
	private String reportSource;
4715 varun.gupt 147
	private List<Long> orderIdsWithoutSuccess;
4600 varun.gupt 148
 
5098 varun.gupt 149
	private File orderIdsToBeMarkedPaid;
4600 varun.gupt 150
	private File hdfcSettlementReport;
151
 
152
	private File ebsSettlementReport;
153
	private File ebsSettlementSummary;
154
 
155
	private String bluedartSettlementDate;
156
	private File bluedartSettlementReport;
157
 
4715 varun.gupt 158
	private String aramexSettlementDate;
159
	private File aramexSettlementReport;
160
 
4600 varun.gupt 161
	private Map<Long, Map<String, Double>> misMatches = new HashMap<Long, Map<String, Double>>();
162
	private Map<Long, String> ebsSettlementSummaries;
163
 
5020 varun.gupt 164
	private List<OrderStatus> refundOrderStatuses;
5189 varun.gupt 165
 
4745 varun.gupt 166
	private List<Order> reshippedOrders = new ArrayList<Order>();
5189 varun.gupt 167
	private List<Order> refundedOrders = new ArrayList<Order>();
168
	private List<Order> unsettledOrders = new ArrayList<Order>();
4745 varun.gupt 169
 
5189 varun.gupt 170
	private Map<Long, PaymentSettlement> paymentSettlementsMap = new HashMap<Long, PaymentSettlement>();
5020 varun.gupt 171
 
4600 varun.gupt 172
	private final DateFormat DATE_FORMAT = new SimpleDateFormat("dd/MM/yyyy");
173
 
5020 varun.gupt 174
	private int rowCount = 0;
175
 
4600 varun.gupt 176
	public String index()	{
5098 varun.gupt 177
		initiatializeDashboard();
4600 varun.gupt 178
		return "report";
179
	}
180
 
181
	public HttpHeaders create()	{
182
 
183
		String formType = request.getParameter("formtype");
4715 varun.gupt 184
		logger.info("Form Type: " + formType);
4600 varun.gupt 185
 
186
		if (formType.equals("uploadEBSSettlementSummary")) {
187
			uploadEBSSettlementSummary();
188
 
189
		} else if (formType.equals("uploadEBSSettlements")) {
190
			uploadEBSSettlements();
191
 
192
		} else if (formType.equals("uploadHDFCSettlements")) {
193
			uploadHDFCSettlements();
194
 
195
		} else if (formType.equals("uploadBluedartSettlements")) {
196
			uploadBluedartSettlements();
4715 varun.gupt 197
 
198
		} else if (formType.equals("uploadAramexSettlements")) {
199
			uploadAramexSettlements();
5098 varun.gupt 200
 
201
		} else if (formType.equals("markOrdersAsPaid"))	{
5189 varun.gupt 202
			uploadOrderIdsToBeMarkedPaid();
4600 varun.gupt 203
		}
4715 varun.gupt 204
	    logger.info("Order Ids where no successful payment was found", orderIdsWithoutSuccess);
5098 varun.gupt 205
 
206
		initiatializeDashboard();
4600 varun.gupt 207
		return new DefaultHttpHeaders("report");
208
	}
209
 
210
	public HttpHeaders generateReconciliationReport()	{
211
		DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
5189 varun.gupt 212
		initiatializeDashboard();
4600 varun.gupt 213
		try	{
214
			//Formatting Form input parameters
215
 
5020 varun.gupt 216
//		    Date startDate = dateFormat.parse(request.getParameter("start"));
217
//			Date endDate = dateFormat.parse(request.getParameter("end"));
4600 varun.gupt 218
		    long vendorId = Long.parseLong(request.getParameter("vendor"));
219
 
5020 varun.gupt 220
		    logger.info("Vendor ID: " + vendorId);
4600 varun.gupt 221
 
4745 varun.gupt 222
		    String vendorName = getVendorName(vendorId);
4600 varun.gupt 223
			DateFormat dateFormatForFile = new SimpleDateFormat("dd.MM.yyyy");
4715 varun.gupt 224
 
4600 varun.gupt 225
			response.setContentType("application/vnd.ms-excel");
5020 varun.gupt 226
			response.setHeader("Content-disposition", "inline; filename=" + vendorName + "-reconciliation.xls");
4600 varun.gupt 227
 
228
			ServletOutputStream sos;
229
			try {
5020 varun.gupt 230
				ByteArrayOutputStream baos = getReconciliationReport(vendorId);
4600 varun.gupt 231
				sos = response.getOutputStream();
232
				baos.writeTo(sos);
233
				sos.flush();
234
			} catch (IOException e)	{
235
				logger.error("Error while streaming the hotspot reconciliation report", e);
236
			}
237
		} catch (NullPointerException e)   {
238
            logger.error("NullPointerException", e);
4745 varun.gupt 239
		}
4600 varun.gupt 240
		return new DefaultHttpHeaders("report");
241
	}
242
 
243
	public void uploadEBSSettlementSummary()	{
244
 
245
		DateFormat settlementDateFormat = new SimpleDateFormat("dd MMM,yyyy hh:mm:ss a");
246
		DateFormat transactionDateFormat = new SimpleDateFormat("yyyy-MM-dd");
247
 
248
		Workbook wb = null;
249
        try {
250
            wb = new HSSFWorkbook(new FileInputStream(ebsSettlementSummary));
251
        } catch (FileNotFoundException e) {
252
            logger.error("Unable to open the Settlement Summary report", e);
253
        } catch (IOException e) {
254
            logger.error("Unable to open the Settlement Summary report", e);
255
        }
256
        Sheet sheet = wb.getSheetAt(0);
257
 
258
        int indexSettlementId = 0;
259
        int indexSettlementDate = 1;
260
        int indexTransactionDateFrom = 2;
261
        int indexTransactionDateTo = 3;
262
        int indexAmount = 4;
263
 
264
        Row firstRow = sheet.getRow(0);
265
        Row secondRow = sheet.getRow(1);
266
        Row thirdRow = sheet.getRow(2);
267
        Row fourthRow = sheet.getRow(3);
268
        Row fifthRow = sheet.getRow(4);
5020 varun.gupt 269
 
4600 varun.gupt 270
		TransactionClient tsc;
271
 
272
		try {
273
			tsc = new TransactionClient();
274
			in.shop2020.model.v1.order.TransactionService.Client transactionClient = tsc.getClient();
275
 
276
			for(Row row: sheet)	{
277
				if(row.equals(firstRow) || row.equals(secondRow) || row.equals(thirdRow) || row.equals(fourthRow) || row.equals(fifthRow))	{
278
					continue;
279
				}
280
				long settlementId = (long) row.getCell(indexSettlementId).getNumericCellValue();
281
				String settlementDateStr = row.getCell(indexSettlementDate).getStringCellValue();
282
				String transactionDateFromStr = row.getCell(indexTransactionDateFrom).getStringCellValue();
283
				String transactionDateToStr = row.getCell(indexTransactionDateTo).getStringCellValue();
284
				Double amount = row.getCell(indexAmount).getNumericCellValue();
285
 
286
				Date settlementDate = settlementDateFormat.parse(settlementDateStr);
287
				Date transactionDateFrom = transactionDateFormat.parse(transactionDateFromStr);
288
				Date transactionDateTo = transactionDateFormat.parse(transactionDateToStr);
289
 
290
				try	{
291
					transactionClient.saveEBSSettlementSummary(settlementId, settlementDate.getTime(), transactionDateFrom.getTime(), transactionDateTo.getTime(), amount);
292
 
293
				} catch (Exception e) {
294
					e.printStackTrace();
295
				}
296
			}
297
        } catch (Exception e) {
298
        	e.printStackTrace();
299
		}
300
	}
301
 
302
	public void uploadHDFCSettlements()	{
303
		logger.info("Uploading HDFC settlements");
304
 
305
		Workbook wb = null;
306
		try {
307
			wb = new HSSFWorkbook(new FileInputStream(this.hdfcSettlementReport));
308
		} catch (FileNotFoundException e) {
4734 varun.gupt 309
			String errMsg = "Unable to open the HDFC Payout report";
310
			logger.error(errMsg, e);
311
			addActionError(errMsg);
312
			return;
4600 varun.gupt 313
		} catch (IOException e) {
4734 varun.gupt 314
			String errMsg = "Unable to open the HDFC Payout report";
315
			logger.error(errMsg, e);
316
			addActionError(errMsg);
317
			return;
4600 varun.gupt 318
		}
319
		Sheet sheet = wb.getSheetAt(0);
320
 
321
		Row firstRow = sheet.getRow(0);
322
 
323
		int indexRECFMT = 2;
324
		int indexSettlementDate = 7;
325
		int indexPaymentId = 13;
326
		int indexMSF = 14;
327
		int indexServiceTax = 15;
328
		int indexEduCess = 16;
329
		int indexNetCollection = 17;
330
 
331
		TransactionClient tsc;
332
		String paymentIdStr = "";
333
		long paymentId = 0;
5020 varun.gupt 334
 
4734 varun.gupt 335
		int countSuccessfulInserts = 0;
336
		int countRefunds = 0;
4600 varun.gupt 337
 
338
		try {
339
			tsc = new TransactionClient();
340
			in.shop2020.model.v1.order.TransactionService.Client transactionClient = tsc.getClient();
341
 
342
			for (Row row: sheet)	{
343
                if(row.equals(firstRow))	continue;
344
 
5020 varun.gupt 345
                if(row.getCell(0).getStringCellValue().equals("Total"))	break;
346
 
4600 varun.gupt 347
                try	{
348
                    String recfmt = row.getCell(indexRECFMT).getStringCellValue();
349
                    Date settlementDate = row.getCell(indexSettlementDate).getDateCellValue();
350
                	double netCollection = row.getCell(indexNetCollection).getNumericCellValue();
5020 varun.gupt 351
                	paymentIdStr = row.getCell(indexPaymentId).getStringCellValue().replace("'", "").trim();
4600 varun.gupt 352
                	paymentId = Long.parseLong(paymentIdStr);
353
 
354
                	logger.info("paymentId: " + paymentId + ", recfmt: " + recfmt + ", settlementDate: " + settlementDate + ", netCollection: " + netCollection);
355
 
4715 varun.gupt 356
                    if (recfmt.trim().equalsIgnoreCase("CVD"))	{
357
                    	if (netCollection > 0.0)	netCollection *= -1.0;
358
                    	transactionClient.savePaymentSettlements(settlementDate.getTime(), 1, paymentId, 0.0, 0.0, netCollection);
4734 varun.gupt 359
                    	countRefunds += 1;
5020 varun.gupt 360
 
4600 varun.gupt 361
                    } else	{
362
                    	double msf = row.getCell(indexMSF).getNumericCellValue();
363
                    	double serviceTax = row.getCell(indexServiceTax).getNumericCellValue();
364
                    	double eduCess = row.getCell(indexEduCess).getNumericCellValue();
365
                    	logger.info("msf: " + msf + ", serviceTax: " + serviceTax + ", eduCess: " + eduCess);
366
 
367
                    	transactionClient.savePaymentSettlements(settlementDate.getTime(), 1, paymentId, serviceTax, (eduCess + msf), netCollection);
4734 varun.gupt 368
                    	countSuccessfulInserts += 1;
4600 varun.gupt 369
                 	}
370
                } catch (NumberFormatException e) {
4734 varun.gupt 371
                	String errMsg = "NumberFormatException recieved for payment Id, " + paymentIdStr;
372
        			logger.error(errMsg + e);
373
        			addActionError(errMsg);
4600 varun.gupt 374
 
375
        		} catch (TransactionServiceException e) {
4734 varun.gupt 376
                	String errMsg = "TransactionServiceException recieved for payment Id, " + paymentId;
377
        			logger.error(errMsg + e);
378
        			addActionError(errMsg);
4600 varun.gupt 379
        		}
380
			}
381
		} catch (TTransportException e) {
382
			logger.error("TTransportException recieved for payment Id," + Long.toString(paymentId) + " " + e);
383
 
384
		} catch (TException e) {
385
			logger.error("TException recieved for payment Id," + Long.toString(paymentId) + " " + e);
386
		}
4734 varun.gupt 387
		addActionMessage("Added settlements for " + countSuccessfulInserts + " payments");
388
		addActionMessage("Added settlements for " + countRefunds + " refund payments");
4600 varun.gupt 389
	}
390
 
391
	public void uploadEBSSettlements()	{
392
		Workbook wb = null;
393
        try {
394
            wb = new HSSFWorkbook(new FileInputStream(this.ebsSettlementReport));
395
        } catch (FileNotFoundException e) {
4734 varun.gupt 396
            logger.error("Unable to open the EBS Settlement detail report", e);
4600 varun.gupt 397
        } catch (IOException e) {
4734 varun.gupt 398
            logger.error("Unable to open the EBS Settlement detail report", e);
4600 varun.gupt 399
        }
400
 
401
        Sheet sheet = wb.getSheetAt(0);
402
 
403
		Row firstRow = sheet.getRow(0);
404
		Row secondRow = sheet.getRow(1);
405
 
406
        int indexPaymentId = 2;
407
        int indexTxnType = 5;
408
        int indexAmount = 6;
409
 
410
        Map<Long, Map<String, Double>> map = new HashMap<Long, Map<String,Double>>();
411
        Map <String, Double> record;
4734 varun.gupt 412
        int countPaymentIds = 0;
4600 varun.gupt 413
 
414
        try	{
415
        	for (Row row: sheet)	{
416
                if(row.equals(firstRow) || row.equals(secondRow))	continue;
417
 
418
                long paymentId = Long.parseLong(row.getCell(indexPaymentId).getStringCellValue());
419
                String transactionType = row.getCell(indexTxnType).getStringCellValue();
420
                double amount = row.getCell(indexAmount).getNumericCellValue();
421
 
422
                if(map.containsKey(paymentId))	{
423
                	map.get(paymentId).put(transactionType, amount);
424
 
425
                } else	{
426
                	record = new HashMap<String, Double>();
427
                	record.put(transactionType, amount);
428
                	map.put(paymentId, record);
4734 varun.gupt 429
                	countPaymentIds += 1;
4600 varun.gupt 430
                }
431
        	}
432
        } catch	(NullPointerException e)	{
433
        	logger.error("" + e);
434
        }
4734 varun.gupt 435
        addActionMessage("Total Payment Ids added: " + countPaymentIds);
4600 varun.gupt 436
 
437
		TransactionClient tsc;
438
        long settlementId = Long.parseLong(request.getParameter("settlementId"));
439
 
4734 varun.gupt 440
        int countPaymentsRecieved = 0;
441
        int countPaymentsRefunded = 0;
442
 
4600 varun.gupt 443
        try	{
444
			tsc = new TransactionClient();
445
			in.shop2020.model.v1.order.TransactionService.Client transactionClient = tsc.getClient();
4734 varun.gupt 446
			long settlementDate;
4600 varun.gupt 447
 
4734 varun.gupt 448
			try	{
449
				settlementDate = transactionClient.getEBSSettlementDate(settlementId);
450
			} catch (TransactionServiceException e) {
451
				String errMsg = "Could not retrieve EBS Settlement date for settlementId, " + settlementId;
452
	        	logger.error(errMsg + e);
453
	        	addActionError(errMsg);
454
	        	return;
455
			}
456
 
4600 varun.gupt 457
        	for (long paymentId: map.keySet())	{
458
            	record = map.get(paymentId);
459
 
460
            	if(record.containsKey("Captured"))	{
461
            		double capturedAmount = record.get("Captured");
462
            		double tdr = record.get("TDR");
463
            		double serviceTax = record.get("ServiceTax");
464
 
465
            		if(tdr < 0)	tdr *= -1;
466
            		if(serviceTax < 0)	serviceTax *= -1;
467
 
468
            		double amount = capturedAmount - tdr - serviceTax;
4734 varun.gupt 469
 
470
            		try	{
471
            			transactionClient.savePaymentSettlements(settlementDate, 2, paymentId, serviceTax, tdr, amount);
472
        			} catch (TransactionServiceException e) {
473
        				String errMsg = "Could not save settlement for paymentId, " + paymentId;
474
        	        	logger.error(errMsg + e);
475
        	        	addActionError(errMsg);
476
        			}
477
            		countPaymentsRecieved += 1;
478
            	}
479
 
480
            	if(record.containsKey("Refunded"))	{
4600 varun.gupt 481
            		double refundedAmount = record.get("Refunded");
482
 
483
            		if (refundedAmount > 0)	refundedAmount *= -1;
484
 
4734 varun.gupt 485
            		try	{
486
            			transactionClient.savePaymentSettlements(settlementDate, 2, paymentId, 0.0, 0.0, refundedAmount);
487
        			} catch (TransactionServiceException e) {
488
        				String errMsg = "Could not save refund settlement for paymentId, " + paymentId;
489
        	        	logger.error(errMsg + e);
490
        	        	addActionError(errMsg);
491
        			}
492
            		countPaymentsRefunded += 1;
4600 varun.gupt 493
            	}
494
            }
4734 varun.gupt 495
        	addActionMessage("Total count of payments recieved: " + countPaymentsRecieved);
496
        	addActionMessage("Total count of payments refunded: " + countPaymentsRefunded);
4600 varun.gupt 497
 
4734 varun.gupt 498
        	try	{
499
        		transactionClient.markEBSSettlementUploaded(settlementId);
500
			} catch (TransactionServiceException e) {
501
				String errMsg = "Could not mark settlement for details Uploaded. Settlement ID: " + settlementId;
502
	        	logger.error(errMsg + e);
503
	        	addActionError(errMsg);
504
			}
4600 varun.gupt 505
        } catch (TTransportException e) {
506
        	logger.error("TTransportException " + e);
507
		} catch (TException e) {
508
        	logger.error("TException " + e);
509
		}
510
	}
511
 
512
	public void uploadBluedartSettlements()	{
513
 
514
		Workbook wb = null;
515
        try {
516
            wb = new HSSFWorkbook(new FileInputStream(this.bluedartSettlementReport));
517
        } catch (FileNotFoundException e) {
518
            logger.error("Unable to open the Settlement report", e);
519
        } catch (IOException e) {
520
            logger.error("Unable to open the Settlement report", e);
521
        }
522
 
523
        Sheet sheet = wb.getSheetAt(0);
524
 
525
        Row firstRow = sheet.getRow(0);
526
        logger.info("Cell count:" + firstRow.getPhysicalNumberOfCells());
527
 
5098 varun.gupt 528
        int indexOrderId = 15;
529
        int indexAmount = 14;
4600 varun.gupt 530
 
531
        TransactionClient tsc;
4734 varun.gupt 532
    	int countSuccessfulSaves = 0;
4600 varun.gupt 533
 
534
        try	{
535
			long settlementDate = DATE_FORMAT.parse(bluedartSettlementDate).getTime();
536
        	tsc = new TransactionClient();
537
        	in.shop2020.model.v1.order.TransactionService.Client transactionClient = tsc.getClient();
538
 
539
        	for (Row row : sheet) {
4875 varun.gupt 540
    			long orderId = 0;
5098 varun.gupt 541
    			String orderIdString = "";
4600 varun.gupt 542
        		try	{
5098 varun.gupt 543
        			orderIdString = row.getCell(indexOrderId).getStringCellValue(); 
544
        			orderId = Long.parseLong(orderIdString);
4715 varun.gupt 545
 
4600 varun.gupt 546
        			double amount = row.getCell(indexAmount).getNumericCellValue();
5020 varun.gupt 547
        			logger.info("Bluedart SettlementDate: " + settlementDate + ", OrderId: " + orderId + ", Amount: " + amount);
4905 varun.gupt 548
        			transactionClient.savePaymentSettlements(settlementDate, 4, orderId, 0.0, 0.0, amount);
4875 varun.gupt 549
        			countSuccessfulSaves += 1;
4600 varun.gupt 550
 
5098 varun.gupt 551
        		} catch (IllegalStateException e) {
552
        			logger.error("" + e);
553
 
554
        		} catch(NumberFormatException e)	{
555
        			logger.error("Extracted String: " + orderIdString + " " + e);
556
 
4600 varun.gupt 557
        		} catch (NullPointerException e) {
4875 varun.gupt 558
        			logger.error("For OrderId: " + orderId + " " + e);
4600 varun.gupt 559
 
4875 varun.gupt 560
        		} catch (TransactionServiceException e) {
561
					logger.error("For OrderId: " + orderId + " " + e);
4600 varun.gupt 562
				}
563
        	}
564
        } catch (ParseException e) {
565
        	logger.error("Could not parse " + bluedartSettlementDate + " " + e);
4875 varun.gupt 566
			addActionError(e.getMessage());
567
 
4600 varun.gupt 568
		} catch (TTransportException e) {
569
			logger.error("" + e);
4875 varun.gupt 570
			addActionError(e.getMessage());
571
 
4600 varun.gupt 572
        } catch (TException e) {
573
        	logger.error("" + e);
4875 varun.gupt 574
			addActionError(e.getMessage());
4600 varun.gupt 575
        }
4734 varun.gupt 576
        addActionMessage("Successfully added Bluedart settlement details for " + countSuccessfulSaves + " orders");
4600 varun.gupt 577
	}
578
 
4715 varun.gupt 579
	public void uploadAramexSettlements()	{
580
		logger.info("Uploading Aramex Settlements" + this.aramexSettlementDate);
581
 
582
		if(this.aramexSettlementDate.equals(""))	{
583
			addActionError("Settlement date cannot be left blank");
584
			return;
585
		}
586
 
587
		Workbook wb = null;
588
        try {
5020 varun.gupt 589
        	wb = new XSSFWorkbook(new FileInputStream(this.aramexSettlementReport));
4715 varun.gupt 590
        } catch (FileNotFoundException e) {
4875 varun.gupt 591
        	addActionError(e.getMessage());
4715 varun.gupt 592
            logger.error("Unable to open the Settlement report", e);
593
        } catch (IOException e) {
4875 varun.gupt 594
        	addActionError(e.getMessage());
4715 varun.gupt 595
            logger.error("Unable to open the Settlement report", e);
596
        } catch (NullPointerException e) {
597
        	addActionError(e.getMessage());
598
        	logger.error("Unable to open the Settlement report", e);
599
        	return;
600
		}
601
 
602
        Sheet sheet = wb.getSheetAt(0);
603
 
4734 varun.gupt 604
        int indexAmount = 1;
5108 varun.gupt 605
        int indexAWB = 0;
4715 varun.gupt 606
 
607
        Row firstRow = sheet.getRow(0);
608
        logger.info("Cell count:" + firstRow.getPhysicalNumberOfCells());
609
 
610
        TransactionClient tsc;
4734 varun.gupt 611
        int countSuccessfulSaves = 0;
4715 varun.gupt 612
        try	{
613
			long settlementDate = DATE_FORMAT.parse(aramexSettlementDate).getTime();
614
 
615
        	tsc = new TransactionClient();
616
        	in.shop2020.model.v1.order.TransactionService.Client transactionClient = tsc.getClient();
617
 
618
	    	for (Row row: sheet)	{
619
	    		if(row.equals(firstRow))	continue;
620
 
5108 varun.gupt 621
	    		try {
622
	    			if(row.getCell(indexAWB).getNumericCellValue() < 1)	break;
623
				} catch (NullPointerException e) {
624
					break;
625
				}
5020 varun.gupt 626
 
5108 varun.gupt 627
	    		long awb = (long) row.getCell(indexAWB).getNumericCellValue();
628
 
4715 varun.gupt 629
	    		try {
5108 varun.gupt 630
		    		long orderId = transactionClient.getOrderForAwb(Long.toString(awb)).getId();
631
		    		double amount = row.getCell(indexAmount).getNumericCellValue();
632
		    		logger.info("Aramex Settlement, Order Id: " + orderId + " Amount: " + amount);
633
 
4907 varun.gupt 634
					transactionClient.savePaymentSettlements(settlementDate, 4, orderId, 0.0, 0.0, amount);
4734 varun.gupt 635
					countSuccessfulSaves += 1;
4715 varun.gupt 636
 
637
				} catch (TransactionServiceException e) {
5108 varun.gupt 638
					logger.error("Transaction Service Exception while getting order for AWB, " + awb, e);
639
					addActionError("Transaction Service Exception while getting order for AWB, " + awb);	
4715 varun.gupt 640
				}
641
	    	}
642
        } catch (ParseException e) {
643
        	addActionError("Could not parse " + aramexSettlementDate);
644
        	logger.error("Could not parse " + aramexSettlementDate + " " + e);
4875 varun.gupt 645
 
4715 varun.gupt 646
        } catch (TTransportException e) {
4875 varun.gupt 647
        	addActionError(e.getMessage());
4715 varun.gupt 648
        	logger.error("" + e);
4875 varun.gupt 649
 
4715 varun.gupt 650
        } catch (TException e) {
4875 varun.gupt 651
        	addActionError(e.getMessage());
4715 varun.gupt 652
        	logger.error("" + e);
653
        }
4734 varun.gupt 654
        addActionMessage("Successfully added Aramex settlement details for " + countSuccessfulSaves + " orders");
4715 varun.gupt 655
	}
656
 
5098 varun.gupt 657
	public void uploadOrderIdsToBeMarkedPaid()	{
658
		logger.info("Uploading Order Ids to be marked as paid");
5189 varun.gupt 659
		List<Long> orderIds = new ArrayList<Long>();
660
 
661
		try {
662
			FileInputStream uploadedFile = new FileInputStream(this.orderIdsToBeMarkedPaid);
663
			String uploadedContent = IOUtils.toString(uploadedFile);
664
 
665
			for(String s: uploadedContent.trim().split("\n"))	{
666
 
667
				if(! s.trim().isEmpty())	orderIds.add(Long.parseLong(s));
668
			}
669
		} catch (FileNotFoundException e) {
670
			addActionError(e.getMessage());
5098 varun.gupt 671
            logger.error("Unable to open the sheet containing orders for which vendor is paid", e);
5189 varun.gupt 672
		} catch (IOException e) {
673
			addActionError(e.getMessage());
674
            logger.error("IOException occured while reading the file containing orders for which vendor is paid", e);
5098 varun.gupt 675
		}
5189 varun.gupt 676
 
5098 varun.gupt 677
        TransactionClient tsc;
678
        int countSuccessfulSaves = 0;
679
 
5189 varun.gupt 680
        try	{
681
        	tsc = new TransactionClient();
682
        	in.shop2020.model.v1.order.TransactionService.Client transactionClient = tsc.getClient();
683
 
684
	    	for (long orderId: orderIds)	{
685
 
5198 varun.gupt 686
	    		logger.info("Marking as paid, Order Id: " + orderId);
5189 varun.gupt 687
	    		try {
688
	    			transactionClient.updateOrderAsPaidToVendor(orderId);
689
					countSuccessfulSaves += 1;
690
 
691
				} catch (TransactionServiceException e) {
692
					logger.error("Transaction Service Exception while getting order for id, " + orderId, e);
693
					addActionError("Transaction Service Exception while getting order for id, " + orderId);	
694
				}
695
	    	}
696
        } catch (TTransportException e) {
697
        	addActionError(e.getMessage());
698
        	logger.error("" + e);
699
 
700
        } catch (TException e) {
701
        	addActionError(e.getMessage());
702
        	logger.error("" + e);
703
        }
5098 varun.gupt 704
        addActionMessage("Successfully marked " + countSuccessfulSaves + " orders as paid to vendor");
705
	}
706
 
5020 varun.gupt 707
	private ByteArrayOutputStream getReconciliationReport(long vendorId)	{
4875 varun.gupt 708
 
4745 varun.gupt 709
		try	{
710
			TransactionClient tsc = new TransactionClient();
711
			in.shop2020.model.v1.order.TransactionService.Client transactionClient = tsc.getClient();
5020 varun.gupt 712
 
5189 varun.gupt 713
	    	PaymentClient psc = new PaymentClient();
714
	    	in.shop2020.payments.PaymentService.Client paymentClient = psc.getClient();
715
 
716
			List<Order> unpaidOrders = transactionClient.getOrdersWhereVendorNotPaid(vendorId);
717
			logger.info("Unpaid Order count: " + unpaidOrders.size());
4905 varun.gupt 718
 
5189 varun.gupt 719
			Map<Long, List<Order>> mapAllOrders = new HashMap<Long, List<Order>>();
4745 varun.gupt 720
 
5189 varun.gupt 721
			for(Order order: unpaidOrders)	{
722
 
723
				if(order.getOriginalOrderId() == 0)	{
724
					List<Order> l = new LinkedList<Order>();
725
					l.add(order);
726
					mapAllOrders.put(order.getId(), l);
727
 
728
				} else if(mapAllOrders.containsKey(order.getOriginalOrderId()))	{
729
 
730
					List<Order> l = mapAllOrders.get(order.getOriginalOrderId());
731
					l.add(order);
732
					mapAllOrders.put(order.getOriginalOrderId(), l);
733
 
734
				} else	{
735
					List<Order> l = new LinkedList<Order>();
736
					l.add(order);
737
					mapAllOrders.put(order.getOriginalOrderId(), l);
738
				}
739
			}
5208 varun.gupt 740
			logger.info("Unpaid Order count in Map: " + mapAllOrders.keySet().size());
5189 varun.gupt 741
 
742
			for (long originalOrderId: mapAllOrders.keySet())	{
743
				List <Order> orders = mapAllOrders.get(originalOrderId);
744
 
745
				try {
746
					PaymentSettlement pmtSettlement = null;
747
 
748
					if(orders.get(0).isCod())	{	// COD Order(s)
749
						long settledOrderId = 0;
750
 
751
						for (Order order: orders)	{
752
							pmtSettlement = transactionClient.getSettlementForReferenceId(order.getId(), false);
753
 
754
							if(pmtSettlement.getReferenceId() > 0)	{
755
								settledOrderId = order.getId();
756
								paymentSettlementsMap.put(order.getId(), pmtSettlement);
757
							}
758
						}
759
 
760
						if(settledOrderId > 0)	{	// Adding unsettled clone orders to re-shipped orders
761
							for (Order order: orders)	{
762
								if (order.getId() != settledOrderId)	{
763
									reshippedOrders.add(order);
764
								}
765
							}
766
						} else	{
767
							unsettledOrders.addAll(orders);
768
						}
769
					} else	{						// Prepaid Order(s)
770
						Payment payment = paymentClient.getSuccessfulPaymentForTxnId(orders.get(0).getTransactionId());
771
 
772
						// Checking if this payment settlement has already been fetched
773
						if(! paymentSettlementsMap.containsKey(payment.getPaymentId()))	{
774
 
775
							pmtSettlement = transactionClient.getSettlementForReferenceId(payment.getPaymentId(), false);
776
 
777
							if(pmtSettlement.getReferenceId() > 0)	{
778
								paymentSettlementsMap.put(payment.getPaymentId(), pmtSettlement);
779
							} else	{
780
								unsettledOrders.addAll(orders);
781
							}
782
						}
783
 
784
						if(orders.size() > 1)	{
785
							reshippedOrders.addAll(orders.subList(1, orders.size()));
786
						}
787
					}
788
				} catch (PaymentException e) {
789
					logger.error("" + e);
790
				}
791
			}
792
			logger.info("Reshipped Orders count: " + reshippedOrders.size());
793
 
4745 varun.gupt 794
		} catch	(TransactionServiceException e)	{
795
			String errMsg = "Transaction Service Exception occured";
796
			logger.error(errMsg, e);
797
			addActionError(errMsg);
798
		} catch (TTransportException e) {
799
			String errMsg = "Transaction Service Exception occured";
800
			logger.error(errMsg, e);
801
			addActionError(errMsg);
802
		} catch (TException e) {
803
			// TODO Auto-generated 
804
			String errMsg = "Transaction Service Exception occured";
805
			logger.error(errMsg, e);
806
			addActionError(errMsg);
807
		}
5189 varun.gupt 808
		logger.info("Payment Settlement Count: " + paymentSettlementsMap.keySet().size());
5208 varun.gupt 809
		logger.info("Payment Settlements: " + paymentSettlementsMap.keySet());
5189 varun.gupt 810
		logger.info("Unsettled Orders Count: " + unsettledOrders.size());
4745 varun.gupt 811
 
4600 varun.gupt 812
		ByteArrayOutputStream baosXLS = new ByteArrayOutputStream();
4745 varun.gupt 813
 
4600 varun.gupt 814
	    Workbook wb = new HSSFWorkbook();
4875 varun.gupt 815
 
4600 varun.gupt 816
	    //Create the style for the title row
817
	    Font font = wb.createFont();
818
	    font.setBoldweight(Font.BOLDWEIGHT_BOLD);
819
	    CellStyle boldStyle = wb.createCellStyle();
820
	    boldStyle.setFont(font);
821
 
822
	    CellStyle rightAlignStyle = wb.createCellStyle();
823
	    rightAlignStyle.setAlignment(CellStyle.ALIGN_RIGHT);
824
 
5189 varun.gupt 825
		Sheet orderSheet = wb.createSheet("Settled Orders");
826
		Sheet unsettledOrderSheet = wb.createSheet("Unsettled Orders");
4875 varun.gupt 827
		Sheet reshippedOrderSheet = wb.createSheet("Reshipped");
5189 varun.gupt 828
//		Sheet mismatchSheet = wb.createSheet("Mismatches");
4600 varun.gupt 829
 
5189 varun.gupt 830
	    populateOrderSheet(vendorId, orderSheet, boldStyle, rightAlignStyle);
831
		populateUnsettledOrderSheet(unsettledOrderSheet);
832
	    populateReshippedOrderSheet(reshippedOrders, reshippedOrderSheet);
5020 varun.gupt 833
//	    populateMismatchSheet(mismatchSheet);
4600 varun.gupt 834
 
835
		// Write the workbook to the output stream
836
		try {
837
			wb.write(baosXLS);
838
			baosXLS.close();
839
		} catch (IOException e) {
840
			logger.error("Unable to write the hotspot reconciliation report to the byte array", e);
5189 varun.gupt 841
		}
4600 varun.gupt 842
		return baosXLS;
843
	}
844
 
845
	private void populateMismatchSheet(Sheet sheet)	{
846
	    int serialNo = 0;
847
		Row titleRow = sheet.createRow(serialNo ++);
848
	    Cell titleCell = titleRow.createCell(0);
849
	    titleCell.setCellValue("Order Reconciliation Report (Mis-matches)");
850
 
851
	    sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 4));
852
	    sheet.createRow(serialNo ++);
853
 
854
	    Row headerRow = sheet.createRow(serialNo ++);
855
	    headerRow.createCell(OrderMismatchColumn.ORDER_ID.getValue()).setCellValue("Order Id");
856
	    headerRow.createCell(OrderMismatchColumn.EXPECTED_COLLECTION.getValue()).setCellValue("Expected Collection");
857
	    headerRow.createCell(OrderMismatchColumn.ACTUAL_COLLECTION.getValue()).setCellValue("Actual Collection");
858
 
859
	    for (long orderId: misMatches.keySet())	{
860
	    	Row contentRow = sheet.createRow(serialNo ++);
861
	    	contentRow.createCell(OrderMismatchColumn.ORDER_ID.getValue()).setCellValue(orderId);
862
	    	contentRow.createCell(OrderMismatchColumn.EXPECTED_COLLECTION.getValue()).setCellValue(misMatches.get(orderId).get("expected"));
863
	    	contentRow.createCell(OrderMismatchColumn.ACTUAL_COLLECTION.getValue()).setCellValue(misMatches.get(orderId).get("actual"));
864
	    }
865
	}
866
 
4875 varun.gupt 867
	private void populateReshippedOrderSheet(List<Order> orders, Sheet sheet) {
868
	    short serialNo = 0;
869
 
870
	    // Create the title row and put all the titles in it. Rows are 0 based.
871
	    Row titleRow = sheet.createRow(serialNo ++);
872
	    Cell titleCell = titleRow.createCell(0);
873
	    titleCell.setCellValue("Reshipped Orders");
874
 
875
	    sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 6));
876
 
877
	    sheet.createRow(serialNo ++);
878
 
879
	    Row headerRow = sheet.createRow(serialNo ++);
880
	    headerRow.createCell(OrderReportColumn.ORDER_ID.getValue()).setCellValue("Order Id");
881
	    headerRow.createCell(OrderReportColumn.ORDER_DATE.getValue()).setCellValue("Order Date");
882
	    headerRow.createCell(OrderReportColumn.BILLING_NUMBER.getValue()).setCellValue("Billing Number");
883
	    headerRow.createCell(OrderReportColumn.BILLING_DATE.getValue()).setCellValue("Billing Date");
884
	    headerRow.createCell(OrderReportColumn.DELIVERY_DATE.getValue()).setCellValue("Delivery Date");
5208 varun.gupt 885
	    headerRow.createCell(OrderReportColumn.SETTLEMENT_DATE.getValue()).setCellValue("Original Order Id");
4875 varun.gupt 886
	    headerRow.createCell(OrderReportColumn.BRAND.getValue()).setCellValue("Brand");
887
	    headerRow.createCell(OrderReportColumn.MODEL_NAME.getValue()).setCellValue("Model Name");
888
	    headerRow.createCell(OrderReportColumn.MODEL_NUMBER.getValue()).setCellValue("Model Number");
889
	    headerRow.createCell(OrderReportColumn.COLOR.getValue()).setCellValue("Color");
890
	    headerRow.createCell(OrderReportColumn.QUANTITY.getValue()).setCellValue("Quantity");
891
	    headerRow.createCell(OrderReportColumn.UNIT_TRANSFER_PRICE.getValue()).setCellValue("Unit Transfer Price");
892
	    headerRow.createCell(OrderReportColumn.UNIT_SELLING_PRICE.getValue()).setCellValue("Unit Selling Price");
893
	    headerRow.createCell(OrderReportColumn.TOTAL_TRANSFER_PRICE.getValue()).setCellValue("Total Transfer Price");
894
	    headerRow.createCell(OrderReportColumn.TOTAL_SELLING_PRICE.getValue()).setCellValue("Total Selling Price");
895
	    headerRow.createCell(OrderReportColumn.CURRENT_STATUS.getValue()).setCellValue("Current Status");
896
	    headerRow.createCell(OrderReportColumn.PAYMENT_TYPE.getValue()).setCellValue("Payment Type");
897
	    headerRow.createCell(OrderReportColumn.PAYMENT_STATUS.getValue()).setCellValue("Payment Status");
898
	    headerRow.createCell(OrderReportColumn.PAYMENT_ID.getValue()).setCellValue("Payment Id");
899
	    headerRow.createCell(OrderReportColumn.COUPON_CODE.getValue()).setCellValue("Coupon Code");
900
//	    headerRow.createCell(OrderReportColumn.COUPON_CATEGORY.getValue()).setCellValue("Coupon Category");
901
//	    headerRow.createCell(OrderReportColumn.DISCOUNT.getValue()).setCellValue("Discount");
902
 
903
	    sheet.createRow(serialNo ++);
904
 
905
		TransactionClient tsc;
906
    	PaymentClient psc;
907
    	LogisticsClient lsc;
908
 
909
		try {
910
			tsc = new TransactionClient();
911
			in.shop2020.model.v1.order.TransactionService.Client transactionClient = tsc.getClient();
912
 
913
			psc = new PaymentClient();
914
	    	in.shop2020.payments.PaymentService.Client paymentClient = psc.getClient();
915
 
916
	    	lsc = new LogisticsClient();
917
	    	in.shop2020.logistics.LogisticsService.Client logisticsClient = lsc.getClient();
918
 
919
	    	Map<Long, String> codProviders = new HashMap<Long, String>();
920
 
921
	    	for (Provider provider: logisticsClient.getAllProviders())	{
922
	    		codProviders.put(provider.getId(), provider.getName());
923
	    	}
924
 
925
	    	List<PaymentGateway> tPaymentGateways = paymentClient.getActivePaymentGateways();
926
	    	Map<Long, String> paymentGateways = new HashMap<Long, String>();
927
 
928
	    	for (PaymentGateway tPaymentGateway: tPaymentGateways)	{
929
	    		paymentGateways.put(tPaymentGateway.getId(), tPaymentGateway.getName());
930
	    	}
931
 
932
			for (Order order: orders)	{
933
			    logger.info("For order: " + order.getId());
934
 
935
			    LineItem lineItem = order.getLineitems().get(0);
936
			    double transferPrice = lineItem.getTransfer_price();
937
			    Payment payment = null;
938
 
939
			    try	{
940
			    	if(order.isCod())	{
941
			    		payment = paymentClient.getPaymentForTxnId(order.getTransactionId()).get(0);
942
			    	} else	{
943
			    		payment = paymentClient.getSuccessfulPaymentForTxnId(order.getTransactionId());
944
			    	}
5208 varun.gupt 945
				    logger.info("Getting Successful Payment for Txn Id: " + order.getTransactionId());
4875 varun.gupt 946
 
947
			    } catch (TApplicationException e)	{
948
			    	orderIdsWithoutSuccess.add(order.getId());
949
			    	String errMsg = "Exception while getting successfull payment for transaction Id, " + order.getTransactionId(); 
950
					logger.error(errMsg, e);
951
					addActionError(errMsg);
952
				}
953
 
954
			    Transaction txn = transactionClient.getTransaction(order.getTransactionId());
955
			    PaymentSettlement paymentSettlement = null;
956
			    String paymentType = null;
957
 
958
			    if(payment != null)	{
5189 varun.gupt 959
//			    	paymentSettlement = transactionClient.getSettlementForPaymentId(payment.getPaymentId());
960
//			    	paymentType = paymentGateways.get(payment.getGatewayId());
4875 varun.gupt 961
			    }
962
 
963
	            double totalSellingPrice = lineItem.getTotal_price();
964
	            double serviceTax = 0.0;
965
	            double otherCollectionCharges = 0.0;
966
	            double netCollection = 0.0;
967
 
968
	            if(paymentSettlement != null)	{
969
		            serviceTax = paymentSettlement.getServiceTax();
970
		            otherCollectionCharges = paymentSettlement.getOtherCharges();
971
		            netCollection = paymentSettlement.getNetCollection();
972
	            }
973
 
974
	            if (netCollection < 0.0)	{
975
	            	paymentType = paymentType + "-REFUND";
976
	            }
977
 
978
		    	Row contentRow = sheet.createRow(serialNo++);
979
	            contentRow.createCell(OrderReportColumn.ORDER_ID.getValue()).setCellValue(order.getId());
980
	            contentRow.createCell(OrderReportColumn.ORDER_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getCreated_timestamp())));
981
			    contentRow.createCell(OrderReportColumn.BILLING_NUMBER.getValue()).setCellValue(order.getInvoice_number());
982
			    contentRow.createCell(OrderReportColumn.BILLING_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getBilling_timestamp())));
983
			    contentRow.createCell(OrderReportColumn.DELIVERY_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getDelivery_timestamp())));
5208 varun.gupt 984
			    contentRow.createCell(OrderReportColumn.SETTLEMENT_DATE.getValue()).setCellValue(order.getOriginalOrderId());
4875 varun.gupt 985
			    contentRow.createCell(OrderReportColumn.BRAND.getValue()).setCellValue(getValueForEmptyString(lineItem.getBrand()));
986
			    contentRow.createCell(OrderReportColumn.MODEL_NAME.getValue()).setCellValue(getValueForEmptyString(lineItem.getModel_name()));
987
			    contentRow.createCell(OrderReportColumn.MODEL_NUMBER.getValue()).setCellValue(getValueForEmptyString(lineItem.getModel_number()));
988
			    contentRow.createCell(OrderReportColumn.COLOR.getValue()).setCellValue(getValueForEmptyString(lineItem.getColor()));
989
			    contentRow.createCell(OrderReportColumn.QUANTITY.getValue()).setCellValue(lineItem.getQuantity());
990
			    contentRow.createCell(OrderReportColumn.UNIT_TRANSFER_PRICE.getValue()).setCellValue(transferPrice);
991
			    contentRow.createCell(OrderReportColumn.UNIT_SELLING_PRICE.getValue()).setCellValue(lineItem.getUnit_price());
992
			    contentRow.createCell(OrderReportColumn.TOTAL_TRANSFER_PRICE.getValue()).setCellValue(transferPrice * lineItem.getQuantity());
993
			    contentRow.createCell(OrderReportColumn.TOTAL_SELLING_PRICE.getValue()).setCellValue(totalSellingPrice);
994
			    contentRow.createCell(OrderReportColumn.CURRENT_STATUS.getValue()).setCellValue(order.getStatusDescription());
995
 
996
		    	double refund = 0.0;
997
 
998
		    	if(order.isCod())	{
999
		    		contentRow.createCell(OrderReportColumn.PAYMENT_TYPE.getValue()).setCellValue("COD - " + codProviders.get(order.getLogistics_provider_id()));
1000
		    	} else	{
1001
			    	contentRow.createCell(OrderReportColumn.PAYMENT_TYPE.getValue()).setCellValue(paymentType);
1002
		    	}
1003
 
1004
			    if (payment != null)	{
5189 varun.gupt 1005
//			    	contentRow.createCell(OrderReportColumn.PAYMENT_STATUS.getValue()).setCellValue(payment.getStatus().name());
1006
//			    	contentRow.createCell(OrderReportColumn.PAYMENT_ID.getValue()).setCellValue(payment.getPaymentId());
4875 varun.gupt 1007
			    }
1008
			    contentRow.createCell(OrderReportColumn.COUPON_CODE.getValue()).setCellValue(txn.getCoupon_code());
1009
			}
1010
 
1011
		    logger.info("Order Ids where no successful payment was found: " + orderIdsWithoutSuccess.size());
1012
		    logger.info(orderIdsWithoutSuccess.toString());
1013
 
1014
	    	sheet.createRow(serialNo++);
1015
 
1016
		} catch (TTransportException e) {
1017
			logger.error("TTransportException " + e);
1018
		} catch (PaymentException e) {
1019
			logger.error("PaymentException " + e);
1020
		} catch (TException e) {
1021
			logger.error("TException " + e);
1022
		} catch (TransactionServiceException e) {
1023
			logger.error("Transaction Service Exception " + e);
1024
		} catch (LogisticsServiceException e) {
1025
			addActionError("Error loading list of COD providers");
1026
			logger.error("Logistics Service Exception " + e);
1027
		}
1028
	}
1029
 
5189 varun.gupt 1030
	private void populateUnsettledOrderSheet(Sheet sheet)	{
1031
		rowCount = 0;
5020 varun.gupt 1032
 
5189 varun.gupt 1033
	    Row headerRow = sheet.createRow(rowCount ++);
1034
	    headerRow.createCell(OrderReportColumn.ORDER_ID.getValue()).setCellValue("Order Id");
1035
	    headerRow.createCell(OrderReportColumn.ORDER_DATE.getValue()).setCellValue("Order Date");
1036
	    headerRow.createCell(OrderReportColumn.BILLING_NUMBER.getValue()).setCellValue("Billing Number");
1037
	    headerRow.createCell(OrderReportColumn.BILLING_DATE.getValue()).setCellValue("Billing Date");
1038
	    headerRow.createCell(OrderReportColumn.DELIVERY_DATE.getValue()).setCellValue("Delivery Date");
1039
	    headerRow.createCell(OrderReportColumn.SETTLEMENT_DATE.getValue()).setCellValue("Settlement Date");
1040
	    headerRow.createCell(OrderReportColumn.BRAND.getValue()).setCellValue("Brand");
1041
	    headerRow.createCell(OrderReportColumn.MODEL_NAME.getValue()).setCellValue("Model Name");
1042
	    headerRow.createCell(OrderReportColumn.MODEL_NUMBER.getValue()).setCellValue("Model Number");
1043
	    headerRow.createCell(OrderReportColumn.COLOR.getValue()).setCellValue("Color");
1044
	    headerRow.createCell(OrderReportColumn.QUANTITY.getValue()).setCellValue("Quantity");
1045
	    headerRow.createCell(OrderReportColumn.UNIT_TRANSFER_PRICE.getValue()).setCellValue("Unit Transfer Price");
1046
	    headerRow.createCell(OrderReportColumn.UNIT_SELLING_PRICE.getValue()).setCellValue("Unit Selling Price");
1047
	    headerRow.createCell(OrderReportColumn.TOTAL_TRANSFER_PRICE.getValue()).setCellValue("Total Transfer Price");
1048
	    headerRow.createCell(OrderReportColumn.TOTAL_SELLING_PRICE.getValue()).setCellValue("Total Selling Price");
1049
	    headerRow.createCell(OrderReportColumn.CURRENT_STATUS.getValue()).setCellValue("Current Status");
1050
	    headerRow.createCell(OrderReportColumn.PAYMENT_TYPE.getValue()).setCellValue("Payment Type");
1051
	    headerRow.createCell(OrderReportColumn.PAYMENT_STATUS.getValue()).setCellValue("Payment Status");
1052
	    headerRow.createCell(OrderReportColumn.PAYMENT_ID.getValue()).setCellValue("Payment Id");
1053
	    headerRow.createCell(OrderReportColumn.COUPON_CODE.getValue()).setCellValue("Coupon Code");
1054
 
1055
	    sheet.createRow(rowCount ++);
1056
 
1057
    	PaymentClient psc;
1058
    	logger.info("unsettledOrders count: " + unsettledOrders.size());
1059
 
1060
    	try	{
1061
			psc = new PaymentClient();
1062
	    	in.shop2020.payments.PaymentService.Client paymentClient = psc.getClient();
1063
 
1064
			for (Order order: unsettledOrders)	{
1065
				Row contentRow = sheet.createRow(rowCount ++);
1066
				LineItem lineItem = order.getLineitems().get(0);
1067
				Payment pmt = null;
1068
 
1069
				if(order.isCod())	{
1070
					pmt = paymentClient.getPaymentForTxnId(order.getTransactionId()).get(0);
1071
				} else	{
1072
					pmt = paymentClient.getSuccessfulPaymentForTxnId(order.getTransactionId());
1073
				}
1074
 
1075
		        contentRow.createCell(OrderReportColumn.ORDER_ID.getValue()).setCellValue(order.getId());
1076
		        contentRow.createCell(OrderReportColumn.ORDER_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getCreated_timestamp())));
1077
			    contentRow.createCell(OrderReportColumn.BILLING_NUMBER.getValue()).setCellValue(order.getInvoice_number());
1078
			    contentRow.createCell(OrderReportColumn.BILLING_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getBilling_timestamp())));
1079
			    contentRow.createCell(OrderReportColumn.DELIVERY_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getDelivery_timestamp())));
1080
			    contentRow.createCell(OrderReportColumn.BRAND.getValue()).setCellValue(getValueForEmptyString(lineItem.getBrand()));
1081
			    contentRow.createCell(OrderReportColumn.MODEL_NAME.getValue()).setCellValue(getValueForEmptyString(lineItem.getModel_name()));
1082
			    contentRow.createCell(OrderReportColumn.MODEL_NUMBER.getValue()).setCellValue(getValueForEmptyString(lineItem.getModel_number()));
1083
			    contentRow.createCell(OrderReportColumn.COLOR.getValue()).setCellValue(getValueForEmptyString(lineItem.getColor()));
1084
			    contentRow.createCell(OrderReportColumn.QUANTITY.getValue()).setCellValue(lineItem.getQuantity());
1085
			    contentRow.createCell(OrderReportColumn.UNIT_TRANSFER_PRICE.getValue()).setCellValue(lineItem.getTransfer_price());
1086
			    contentRow.createCell(OrderReportColumn.UNIT_SELLING_PRICE.getValue()).setCellValue(lineItem.getUnit_price());
1087
			    contentRow.createCell(OrderReportColumn.TOTAL_TRANSFER_PRICE.getValue()).setCellValue(lineItem.getTransfer_price() * lineItem.getQuantity());
1088
			    contentRow.createCell(OrderReportColumn.TOTAL_SELLING_PRICE.getValue()).setCellValue(lineItem.getTotal_price());
1089
			    contentRow.createCell(OrderReportColumn.CURRENT_STATUS.getValue()).setCellValue(order.getStatusDescription());
1090
 
1091
			    if(pmt.getGatewayId() == 4)	{
1092
			    	contentRow.createCell(OrderReportColumn.PAYMENT_TYPE.getValue()).setCellValue("COD-" + codProviders.get(order.getLogistics_provider_id()));
1093
			    } else	{
1094
			    	contentRow.createCell(OrderReportColumn.PAYMENT_TYPE.getValue()).setCellValue(paymentGateways.get(pmt.getGatewayId()));
1095
			    }
1096
		    	contentRow.createCell(OrderReportColumn.PAYMENT_STATUS.getValue()).setCellValue(pmt.getStatus().name());
1097
		    	contentRow.createCell(OrderReportColumn.PAYMENT_ID.getValue()).setCellValue(pmt.getPaymentId());
1098
	    	}
1099
	    } catch (Exception e) {
1100
			e.printStackTrace();
1101
		}
1102
	}
1103
 
1104
	private void populateOrderSheet(long vendorId, Sheet sheet, CellStyle style, CellStyle rightAlignStyle) {
1105
 
5020 varun.gupt 1106
	    // Create the title row and put all the titles in it. Rows are 0 based
1107
	    Row titleRow = sheet.createRow(rowCount ++);
4600 varun.gupt 1108
	    Cell titleCell = titleRow.createCell(0);
5020 varun.gupt 1109
	    titleCell.setCellValue("Order Reconciliation Report");
4600 varun.gupt 1110
	    titleCell.setCellStyle(style);
1111
 
5020 varun.gupt 1112
	    sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 4));
4600 varun.gupt 1113
 
5020 varun.gupt 1114
	    sheet.createRow(rowCount ++);
4600 varun.gupt 1115
 
5020 varun.gupt 1116
	    Row headerRow = sheet.createRow(rowCount ++);
4600 varun.gupt 1117
	    headerRow.createCell(OrderReportColumn.ORDER_ID.getValue()).setCellValue("Order Id");
1118
	    headerRow.createCell(OrderReportColumn.ORDER_DATE.getValue()).setCellValue("Order Date");
1119
	    headerRow.createCell(OrderReportColumn.BILLING_NUMBER.getValue()).setCellValue("Billing Number");
1120
	    headerRow.createCell(OrderReportColumn.BILLING_DATE.getValue()).setCellValue("Billing Date");
1121
	    headerRow.createCell(OrderReportColumn.DELIVERY_DATE.getValue()).setCellValue("Delivery Date");
1122
	    headerRow.createCell(OrderReportColumn.SETTLEMENT_DATE.getValue()).setCellValue("Settlement Date");
1123
	    headerRow.createCell(OrderReportColumn.BRAND.getValue()).setCellValue("Brand");
1124
	    headerRow.createCell(OrderReportColumn.MODEL_NAME.getValue()).setCellValue("Model Name");
1125
	    headerRow.createCell(OrderReportColumn.MODEL_NUMBER.getValue()).setCellValue("Model Number");
1126
	    headerRow.createCell(OrderReportColumn.COLOR.getValue()).setCellValue("Color");
1127
	    headerRow.createCell(OrderReportColumn.QUANTITY.getValue()).setCellValue("Quantity");
1128
	    headerRow.createCell(OrderReportColumn.UNIT_TRANSFER_PRICE.getValue()).setCellValue("Unit Transfer Price");
1129
	    headerRow.createCell(OrderReportColumn.UNIT_SELLING_PRICE.getValue()).setCellValue("Unit Selling Price");
1130
	    headerRow.createCell(OrderReportColumn.TOTAL_TRANSFER_PRICE.getValue()).setCellValue("Total Transfer Price");
1131
	    headerRow.createCell(OrderReportColumn.TOTAL_SELLING_PRICE.getValue()).setCellValue("Total Selling Price");
1132
	    headerRow.createCell(OrderReportColumn.CURRENT_STATUS.getValue()).setCellValue("Current Status");
1133
	    headerRow.createCell(OrderReportColumn.PAYMENT_TYPE.getValue()).setCellValue("Payment Type");
4745 varun.gupt 1134
	    headerRow.createCell(OrderReportColumn.PAYMENT_STATUS.getValue()).setCellValue("Payment Status");
4600 varun.gupt 1135
	    headerRow.createCell(OrderReportColumn.PAYMENT_ID.getValue()).setCellValue("Payment Id");
1136
	    headerRow.createCell(OrderReportColumn.COUPON_CODE.getValue()).setCellValue("Coupon Code");
1137
	    headerRow.createCell(OrderReportColumn.SERVICE_TAX.getValue()).setCellValue("Service Tax");
1138
	    headerRow.createCell(OrderReportColumn.OTHER_CHARGES.getValue()).setCellValue("Other Charges");
1139
	    headerRow.createCell(OrderReportColumn.NET_COLLECTION.getValue()).setCellValue("Net Collection");
1140
 
5020 varun.gupt 1141
	    sheet.createRow(rowCount ++);
4600 varun.gupt 1142
 
1143
		TransactionClient tsc;
1144
    	PaymentClient psc;
4734 varun.gupt 1145
    	LogisticsClient lsc;
4745 varun.gupt 1146
 
4600 varun.gupt 1147
		try {
1148
			tsc = new TransactionClient();
1149
			in.shop2020.model.v1.order.TransactionService.Client transactionClient = tsc.getClient();
5189 varun.gupt 1150
 
5020 varun.gupt 1151
	    	lsc = new LogisticsClient();
1152
	    	in.shop2020.logistics.LogisticsService.Client logisticsClient = lsc.getClient();
5189 varun.gupt 1153
 
4600 varun.gupt 1154
			psc = new PaymentClient();
1155
	    	in.shop2020.payments.PaymentService.Client paymentClient = psc.getClient();
1156
 
5020 varun.gupt 1157
	    	List<PaymentGateway> tPaymentGateways = paymentClient.getActivePaymentGateways();
4734 varun.gupt 1158
 
5020 varun.gupt 1159
	    	for (PaymentGateway tPaymentGateway: tPaymentGateways)	{
1160
	    		paymentGateways.put(tPaymentGateway.getId(), tPaymentGateway.getName());
1161
	    	}
4734 varun.gupt 1162
 
1163
	    	for (Provider provider: logisticsClient.getAllProviders())	{
1164
	    		codProviders.put(provider.getId(), provider.getName());
1165
	    	}
1166
 
5189 varun.gupt 1167
	    	for (PaymentSettlement paymentSettlement: paymentSettlementsMap.values())	{
5020 varun.gupt 1168
 
1169
    			try {
1170
    				if(paymentSettlement.getPaymentGatewayId() == 4)	{	// If COD
1171
	    				Order order = transactionClient.getOrder(paymentSettlement.getReferenceId());
1172
	    				Transaction txn = transactionClient.getTransaction(order.getTransactionId());
1173
	    				Payment payment = paymentClient.getPaymentForTxnId(txn.getId()).get(0);
1174
 
1175
		    			if (order.getVendorId() == vendorId)	{
1176
					    	Row contentRow = sheet.createRow(rowCount ++);
1177
					    	outputCODRow(contentRow, paymentSettlement, order, txn, payment);
1178
		    			}
1179
    				} else	{	// If prepaid
5189 varun.gupt 1180
    					logger.info("ReferenceId: " + paymentSettlement.getReferenceId());
5020 varun.gupt 1181
    					Payment payment = paymentClient.getPayment(paymentSettlement.getReferenceId());
1182
    					Transaction txn = transactionClient.getTransaction(payment.getMerchantTxnId());
1183
 
1184
    					outputPrepaidTransactionRows(sheet, vendorId, paymentSettlement, txn, payment);
1185
    				}
1186
    			} catch (TransactionServiceException e) {
1187
					logger.error("TransactionServiceException " + e);
1188
				} catch (TException e) {
5189 varun.gupt 1189
					e.printStackTrace();
5020 varun.gupt 1190
				} catch (PaymentException e) {
1191
					logger.error("PaymentException " + e);
1192
				}
4600 varun.gupt 1193
	    	}
5020 varun.gupt 1194
	    	rowCount ++;
1195
 
5189 varun.gupt 1196
	    	logger.info("Refunded Order Count: " + refundedOrders.size());
1197
 
1198
	    	for (Order order: refundedOrders)	{
5020 varun.gupt 1199
	    		try {
5189 varun.gupt 1200
					Transaction txn = transactionClient.getTransaction(order.getTransactionId());
1201
	    			Payment payment = paymentClient.getSuccessfulPaymentForTxnId(txn.getId());
1202
	    			PaymentSettlement paymentSettlement = transactionClient.getSettlementForReferenceId(payment.getPaymentId(), true);
5020 varun.gupt 1203
 
1204
					outputRefundRows(sheet, vendorId, paymentSettlement, txn, payment);
1205
    			} catch (TransactionServiceException e) {
1206
					logger.error("TransactionServiceException " + e);
1207
				} catch (TException e) {
1208
					logger.error("TException " + e);
1209
				} catch (PaymentException e) {
1210
					logger.error("PaymentException " + e);
4875 varun.gupt 1211
				}
5020 varun.gupt 1212
	    	}
5189 varun.gupt 1213
//	    	for (PaymentSettlement paymentSettlement: refundSettlements)	{
1214
//	    		try {
1215
//	    			Payment payment = paymentClient.getPayment(paymentSettlement.getReferenceId());
1216
//					Transaction txn = transactionClient.getTransaction(payment.getMerchantTxnId());
1217
//					
1218
//					outputRefundRows(sheet, vendorId, paymentSettlement, txn, payment);
1219
//    			} catch (TransactionServiceException e) {
1220
//					logger.error("TransactionServiceException " + e);
1221
//				} catch (TException e) {
1222
//					logger.error("TException " + e);
1223
//				} catch (PaymentException e) {
1224
//					logger.error("PaymentException " + e);
1225
//				}
1226
//	    	}
5020 varun.gupt 1227
		} catch (TTransportException e) {
1228
			logger.error("TTransportException", e);
1229
		} catch (LogisticsServiceException e) {
1230
			logger.error("LogisticsServiceException" + e);
1231
		} catch (TException e) {
1232
			logger.error("TException" + e);
1233
		} catch (PaymentException e) {
1234
			logger.error("PaymentException" + e);
1235
		}
1236
	}
1237
 
1238
	private void outputRefundRows(Sheet sheet, long vendorId, PaymentSettlement paymentSettlement, Transaction txn, Payment payment)	{
5189 varun.gupt 1239
		logger.info("Printing Refunded orders for pmt Id, " + payment.getPaymentId());
5020 varun.gupt 1240
 
1241
		boolean isFirstOrderForTransaction = true;
1242
 
1243
		for (Order order: txn.getOrders())	{
1244
			if(order.getVendorId() == vendorId && refundOrderStatuses.contains(order.getStatus()))	{
1245
		    	Row contentRow = sheet.createRow(rowCount ++);
1246
		    	LineItem lineItem = order.getLineitems().get(0);
4734 varun.gupt 1247
 
5020 varun.gupt 1248
		        contentRow.createCell(OrderReportColumn.ORDER_ID.getValue()).setCellValue(order.getId());
1249
		        contentRow.createCell(OrderReportColumn.ORDER_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getCreated_timestamp())));
1250
			    contentRow.createCell(OrderReportColumn.BILLING_NUMBER.getValue()).setCellValue(order.getInvoice_number());
1251
			    contentRow.createCell(OrderReportColumn.BILLING_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getBilling_timestamp())));
1252
			    contentRow.createCell(OrderReportColumn.DELIVERY_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getDelivery_timestamp())));
1253
			    contentRow.createCell(OrderReportColumn.BRAND.getValue()).setCellValue(getValueForEmptyString(lineItem.getBrand()));
1254
			    contentRow.createCell(OrderReportColumn.MODEL_NAME.getValue()).setCellValue(getValueForEmptyString(lineItem.getModel_name()));
1255
			    contentRow.createCell(OrderReportColumn.MODEL_NUMBER.getValue()).setCellValue(getValueForEmptyString(lineItem.getModel_number()));
1256
			    contentRow.createCell(OrderReportColumn.COLOR.getValue()).setCellValue(getValueForEmptyString(lineItem.getColor()));
1257
			    contentRow.createCell(OrderReportColumn.QUANTITY.getValue()).setCellValue(lineItem.getQuantity());
1258
			    contentRow.createCell(OrderReportColumn.UNIT_TRANSFER_PRICE.getValue()).setCellValue(lineItem.getTransfer_price());
1259
			    contentRow.createCell(OrderReportColumn.UNIT_SELLING_PRICE.getValue()).setCellValue(lineItem.getUnit_price());
1260
			    contentRow.createCell(OrderReportColumn.TOTAL_TRANSFER_PRICE.getValue()).setCellValue(lineItem.getTransfer_price() * lineItem.getQuantity());
1261
			    contentRow.createCell(OrderReportColumn.TOTAL_SELLING_PRICE.getValue()).setCellValue(lineItem.getTotal_price());
1262
			    contentRow.createCell(OrderReportColumn.CURRENT_STATUS.getValue()).setCellValue(order.getStatusDescription());
1263
		    	contentRow.createCell(OrderReportColumn.PAYMENT_TYPE.getValue()).setCellValue(paymentGateways.get(payment.getGatewayId()));
1264
			    contentRow.createCell(OrderReportColumn.SETTLEMENT_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(paymentSettlement.getSettlementDate())));
1265
			    contentRow.createCell(OrderReportColumn.COUPON_CODE.getValue()).setCellValue(txn.getCoupon_code());
1266
		    	contentRow.createCell(OrderReportColumn.PAYMENT_STATUS.getValue()).setCellValue(payment.getStatus().name());
1267
		    	contentRow.createCell(OrderReportColumn.PAYMENT_ID.getValue()).setCellValue(payment.getPaymentId());
1268
 
1269
		    	if(isFirstOrderForTransaction)	{
1270
			    	contentRow.createCell(OrderReportColumn.SERVICE_TAX.getValue()).setCellValue(paymentSettlement.getServiceTax());
1271
				    contentRow.createCell(OrderReportColumn.OTHER_CHARGES.getValue()).setCellValue(paymentSettlement.getOtherCharges());
1272
				    contentRow.createCell(OrderReportColumn.NET_COLLECTION.getValue()).setCellValue(paymentSettlement.getNetCollection());
1273
				    isFirstOrderForTransaction = false;
1274
		    	}
4715 varun.gupt 1275
			}
5020 varun.gupt 1276
		}
1277
	}
5098 varun.gupt 1278
 
5020 varun.gupt 1279
	private void outputPrepaidTransactionRows(Sheet sheet, long vendorId, PaymentSettlement paymentSettlement, Transaction txn, Payment payment)	{
1280
		logger.info("Printing orders for pmt Id, " + payment.getPaymentId());
1281
 
1282
		for (Order order: txn.getOrders())	{
5208 varun.gupt 1283
			if(order.getVendorId() == vendorId && ! order.isVendorPaid() && order.getOriginalOrderId() == 0)	{
5189 varun.gupt 1284
 
1285
				if(refundOrderStatuses.contains(order.getStatus()))	{
1286
 
1287
					refundedOrders.add(order);
1288
				}
5208 varun.gupt 1289
 
5020 varun.gupt 1290
		    	Row contentRow = sheet.createRow(rowCount ++);
1291
		    	LineItem lineItem = order.getLineitems().get(0);
4734 varun.gupt 1292
 
5020 varun.gupt 1293
		        contentRow.createCell(OrderReportColumn.ORDER_ID.getValue()).setCellValue(order.getId());
1294
		        contentRow.createCell(OrderReportColumn.ORDER_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getCreated_timestamp())));
1295
			    contentRow.createCell(OrderReportColumn.BILLING_NUMBER.getValue()).setCellValue(order.getInvoice_number());
1296
			    contentRow.createCell(OrderReportColumn.BILLING_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getBilling_timestamp())));
1297
			    contentRow.createCell(OrderReportColumn.DELIVERY_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getDelivery_timestamp())));
1298
			    contentRow.createCell(OrderReportColumn.BRAND.getValue()).setCellValue(getValueForEmptyString(lineItem.getBrand()));
1299
			    contentRow.createCell(OrderReportColumn.MODEL_NAME.getValue()).setCellValue(getValueForEmptyString(lineItem.getModel_name()));
1300
			    contentRow.createCell(OrderReportColumn.MODEL_NUMBER.getValue()).setCellValue(getValueForEmptyString(lineItem.getModel_number()));
1301
			    contentRow.createCell(OrderReportColumn.COLOR.getValue()).setCellValue(getValueForEmptyString(lineItem.getColor()));
1302
			    contentRow.createCell(OrderReportColumn.QUANTITY.getValue()).setCellValue(lineItem.getQuantity());
1303
			    contentRow.createCell(OrderReportColumn.UNIT_TRANSFER_PRICE.getValue()).setCellValue(lineItem.getTransfer_price());
1304
			    contentRow.createCell(OrderReportColumn.UNIT_SELLING_PRICE.getValue()).setCellValue(lineItem.getUnit_price());
1305
			    contentRow.createCell(OrderReportColumn.TOTAL_TRANSFER_PRICE.getValue()).setCellValue(lineItem.getTransfer_price() * lineItem.getQuantity());
1306
			    contentRow.createCell(OrderReportColumn.TOTAL_SELLING_PRICE.getValue()).setCellValue(lineItem.getTotal_price());
1307
			    contentRow.createCell(OrderReportColumn.CURRENT_STATUS.getValue()).setCellValue(order.getStatusDescription());
1308
		    	contentRow.createCell(OrderReportColumn.PAYMENT_TYPE.getValue()).setCellValue(paymentGateways.get(payment.getGatewayId()));
1309
			    contentRow.createCell(OrderReportColumn.SETTLEMENT_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(paymentSettlement.getSettlementDate())));
1310
			    contentRow.createCell(OrderReportColumn.COUPON_CODE.getValue()).setCellValue(txn.getCoupon_code());
1311
		    	contentRow.createCell(OrderReportColumn.PAYMENT_STATUS.getValue()).setCellValue(payment.getStatus().name());
1312
		    	contentRow.createCell(OrderReportColumn.PAYMENT_ID.getValue()).setCellValue(payment.getPaymentId());
4715 varun.gupt 1313
 
5208 varun.gupt 1314
		    	contentRow.createCell(OrderReportColumn.SERVICE_TAX.getValue()).setCellValue((paymentSettlement.getServiceTax() * order.getTotal_amount()) / payment.getAmount());
1315
			    contentRow.createCell(OrderReportColumn.OTHER_CHARGES.getValue()).setCellValue((paymentSettlement.getOtherCharges() * order.getTotal_amount()) / payment.getAmount());
1316
			    contentRow.createCell(OrderReportColumn.NET_COLLECTION.getValue()).setCellValue((paymentSettlement.getNetCollection() * order.getTotal_amount()) / payment.getAmount());
5020 varun.gupt 1317
			}
4600 varun.gupt 1318
		}
1319
	}
1320
 
5020 varun.gupt 1321
	private void outputCODRow(Row contentRow, PaymentSettlement paymentSettlement, Order order, Transaction txn, Payment payment)	{
1322
 
1323
		LineItem lineItem = order.getLineitems().get(0);
1324
 
1325
        contentRow.createCell(OrderReportColumn.ORDER_ID.getValue()).setCellValue(order.getId());
1326
        contentRow.createCell(OrderReportColumn.ORDER_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getCreated_timestamp())));
1327
	    contentRow.createCell(OrderReportColumn.BILLING_NUMBER.getValue()).setCellValue(order.getInvoice_number());
1328
	    contentRow.createCell(OrderReportColumn.BILLING_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getBilling_timestamp())));
1329
	    contentRow.createCell(OrderReportColumn.DELIVERY_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getDelivery_timestamp())));
1330
	    contentRow.createCell(OrderReportColumn.BRAND.getValue()).setCellValue(getValueForEmptyString(lineItem.getBrand()));
1331
	    contentRow.createCell(OrderReportColumn.MODEL_NAME.getValue()).setCellValue(getValueForEmptyString(lineItem.getModel_name()));
1332
	    contentRow.createCell(OrderReportColumn.MODEL_NUMBER.getValue()).setCellValue(getValueForEmptyString(lineItem.getModel_number()));
1333
	    contentRow.createCell(OrderReportColumn.COLOR.getValue()).setCellValue(getValueForEmptyString(lineItem.getColor()));
1334
	    contentRow.createCell(OrderReportColumn.QUANTITY.getValue()).setCellValue(lineItem.getQuantity());
1335
	    contentRow.createCell(OrderReportColumn.UNIT_TRANSFER_PRICE.getValue()).setCellValue(lineItem.getTransfer_price());
1336
	    contentRow.createCell(OrderReportColumn.UNIT_SELLING_PRICE.getValue()).setCellValue(lineItem.getUnit_price());
1337
	    contentRow.createCell(OrderReportColumn.TOTAL_TRANSFER_PRICE.getValue()).setCellValue(lineItem.getTransfer_price() * lineItem.getQuantity());
1338
	    contentRow.createCell(OrderReportColumn.TOTAL_SELLING_PRICE.getValue()).setCellValue(lineItem.getTotal_price());
1339
	    contentRow.createCell(OrderReportColumn.CURRENT_STATUS.getValue()).setCellValue(order.getStatusDescription());
1340
    	contentRow.createCell(OrderReportColumn.PAYMENT_TYPE.getValue()).setCellValue("COD - " + codProviders.get(order.getLogistics_provider_id()));
1341
    	contentRow.createCell(OrderReportColumn.SERVICE_TAX.getValue()).setCellValue(paymentSettlement.getServiceTax());
1342
	    contentRow.createCell(OrderReportColumn.OTHER_CHARGES.getValue()).setCellValue(paymentSettlement.getOtherCharges());
1343
	    contentRow.createCell(OrderReportColumn.NET_COLLECTION.getValue()).setCellValue(paymentSettlement.getNetCollection());
1344
	    contentRow.createCell(OrderReportColumn.SETTLEMENT_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(paymentSettlement.getSettlementDate())));
1345
	    contentRow.createCell(OrderReportColumn.COUPON_CODE.getValue()).setCellValue(txn.getCoupon_code());
1346
    	contentRow.createCell(OrderReportColumn.PAYMENT_STATUS.getValue()).setCellValue(payment.getStatus().name());
1347
    	contentRow.createCell(OrderReportColumn.PAYMENT_ID.getValue()).setCellValue(payment.getPaymentId());
1348
	}
1349
 
5098 varun.gupt 1350
	private void initiatializeDashboard()	{
1351
		try	{
1352
			CatalogClient csc = new CatalogClient();
1353
			Client catalogClient = csc.getClient();
1354
			OrderStatusGroups orderStatusGroups = new OrderStatusGroups();
1355
			refundOrderStatuses = orderStatusGroups.getRefundedOrders();
1356
 
1357
			vendors = catalogClient.getAllVendors();
1358
			orderIdsWithoutSuccess = new ArrayList<Long>();
1359
 
1360
			TransactionClient tsc = new TransactionClient();
1361
			in.shop2020.model.v1.order.TransactionService.Client transactionClient = tsc.getClient();
1362
 
1363
			ebsSettlementSummaries = transactionClient.getEBSSettlementSummaries();
1364
			logger.info("", ebsSettlementSummaries);
1365
 
1366
		} catch (TException e) {
1367
			logger.error("TException", e);
1368
 
1369
		} catch (TransactionServiceException e) {
1370
			logger.error("TransactionServiceException", e);
1371
		}
1372
	}
1373
 
4600 varun.gupt 1374
	public List<Vendor> getAllVendors()	{
1375
		return this.vendors;
1376
	}
1377
 
1378
	private String getValueForEmptyString(String s){
1379
		if(s==null || s.equals(""))
1380
			return "-";
1381
		else
1382
			return s; 
1383
	}
1384
 
1385
	private String getVendorName(long vendorId)	{
1386
		for (Vendor vendor: vendors)	{
1387
			if (vendor.getId() == vendorId)	return vendor.getName();
1388
		}
1389
		return null;
1390
	}
1391
 
1392
	public String getReportSource()	{
1393
		return reportSource;
1394
	}
1395
 
1396
	public void setReportSource(String reportSource)	{
1397
		this.reportSource = reportSource;
1398
	}
1399
 
1400
    public File getHdfcSettlementReport() {
1401
        return hdfcSettlementReport;
1402
    }
1403
 
1404
    public void setHdfcSettlementReport(File hdfcSettlementReport) {
1405
        this.hdfcSettlementReport = hdfcSettlementReport;
1406
    }
1407
 
1408
    public File getEbsSettlementSummary()	{
1409
    	return ebsSettlementSummary;
1410
    }
1411
 
1412
    public void setEbsSettlementSummary(File ebsSettlementSummary)	{
1413
    	this.ebsSettlementSummary = ebsSettlementSummary;
1414
    }
1415
 
1416
    public File getEbsSettlementReport()	{
1417
    	return ebsSettlementReport;
1418
    }
1419
 
1420
    public void setEbsSettlementReport(File ebsSettlementReport)	{
1421
    	this.ebsSettlementReport = ebsSettlementReport;
1422
    }
1423
 
1424
    public String getBluedartSettlementDate()	{
1425
    	return bluedartSettlementDate;
1426
    }
1427
 
1428
    public void setBluedartSettlementDate(String bluedartSettlementDate)	{
1429
    	this.bluedartSettlementDate = bluedartSettlementDate;
1430
    }
1431
 
1432
    public File getBluedartSettlementReport()	{
1433
    	return bluedartSettlementReport;
1434
    }
1435
 
1436
    public void setBluedartSettlementReport(File bluedartSettlementReport)	{
1437
    	this.bluedartSettlementReport = bluedartSettlementReport;
1438
    }
1439
 
4715 varun.gupt 1440
    public String getAramexSettlementDate()	{
1441
    	return this.aramexSettlementDate;
1442
    }
1443
 
1444
    public void setAramexSettlementDate(String aramexSettlementDate)	{
1445
    	this.aramexSettlementDate = aramexSettlementDate;
1446
    }
1447
 
1448
    public void setAramexSettlementReport(File aramexSettlementReport) {
1449
		this.aramexSettlementReport = aramexSettlementReport;
1450
	}
1451
 
1452
	public File getAramexSettlementReport() {
1453
		return aramexSettlementReport;
1454
	}
1455
 
4600 varun.gupt 1456
	@Override
4715 varun.gupt 1457
     public void setServletContext(ServletContext context) {
4600 varun.gupt 1458
        this.context = context;
1459
    }
1460
 
1461
    public String getServletContextPath() {
1462
        return context.getContextPath();
1463
    }
1464
 
1465
	@Override
1466
	public void setServletResponse(HttpServletResponse response) {
1467
		this.response = response;
1468
	}
1469
 
1470
	@Override
1471
	public void setServletRequest(HttpServletRequest request) {
1472
		this.request = request;
1473
		this.session = request.getSession();
1474
	}
1475
 
1476
	public Map<Long, String> getEBSSettlementSummaries()	{
1477
		return ebsSettlementSummaries;
1478
	}
5098 varun.gupt 1479
 
1480
	public void setOrderIdsToBeMarkedPaid(File orderIdsToBeMarkedPaid) {
1481
		this.orderIdsToBeMarkedPaid = orderIdsToBeMarkedPaid;
1482
	}
1483
 
1484
	public File getOrderIdsToBeMarkedPaid() {
1485
		return orderIdsToBeMarkedPaid;
1486
	}
4600 varun.gupt 1487
}