Subversion Repositories SmartDukaan

Rev

Rev 5189 | Rev 5208 | 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
			}
740
			logger.info("Unpaid Order count in Map: " + mapAllOrders.size());
741
 
742
	    	int pmtSettlementFoundNull = 0;
743
	    	int pmtSettlementFound = 0;
744
 
745
			for (long originalOrderId: mapAllOrders.keySet())	{
746
				List <Order> orders = mapAllOrders.get(originalOrderId);
747
 
748
				try {
749
					PaymentSettlement pmtSettlement = null;
750
 
751
					if(orders.get(0).isCod())	{	// COD Order(s)
752
						long settledOrderId = 0;
753
 
754
						for (Order order: orders)	{
755
							pmtSettlement = transactionClient.getSettlementForReferenceId(order.getId(), false);
756
 
757
							if(pmtSettlement.getReferenceId() > 0)	{
758
								settledOrderId = order.getId();
759
								paymentSettlementsMap.put(order.getId(), pmtSettlement);
760
							} else	{
761
								pmtSettlementFoundNull ++;
762
							}
763
						}
764
 
765
						if(settledOrderId > 0)	{	// Adding unsettled clone orders to re-shipped orders
766
							for (Order order: orders)	{
767
								if (order.getId() != settledOrderId)	{
768
									reshippedOrders.add(order);
769
								}
770
							}
771
						} else	{
772
							unsettledOrders.addAll(orders);
773
						}
774
					} else	{						// Prepaid Order(s)
775
						Payment payment = paymentClient.getSuccessfulPaymentForTxnId(orders.get(0).getTransactionId());
776
 
777
						// Checking if this payment settlement has already been fetched
778
						if(! paymentSettlementsMap.containsKey(payment.getPaymentId()))	{
779
 
780
							pmtSettlement = transactionClient.getSettlementForReferenceId(payment.getPaymentId(), false);
781
 
782
							if(pmtSettlement.getReferenceId() > 0)	{
783
								paymentSettlementsMap.put(payment.getPaymentId(), pmtSettlement);
784
							} else	{
785
								unsettledOrders.addAll(orders);
786
								pmtSettlementFoundNull ++;
787
							}
788
						}
789
 
790
						if(orders.size() > 1)	{
791
							reshippedOrders.addAll(orders.subList(1, orders.size()));
792
						}
793
					}
794
				} catch (PaymentException e) {
795
					logger.error("" + e);
796
				}
797
			}
798
			logger.info("pmtSettlementFoundNull: " + pmtSettlementFoundNull);
799
			logger.info("Reshipped Orders count: " + reshippedOrders.size());
800
 
4745 varun.gupt 801
		} catch	(TransactionServiceException e)	{
802
			String errMsg = "Transaction Service Exception occured";
803
			logger.error(errMsg, e);
804
			addActionError(errMsg);
805
		} catch (TTransportException e) {
806
			String errMsg = "Transaction Service Exception occured";
807
			logger.error(errMsg, e);
808
			addActionError(errMsg);
809
		} catch (TException e) {
810
			// TODO Auto-generated 
811
			String errMsg = "Transaction Service Exception occured";
812
			logger.error(errMsg, e);
813
			addActionError(errMsg);
814
		}
5189 varun.gupt 815
		logger.info("Payment Settlement Count: " + paymentSettlementsMap.keySet().size());
816
		logger.info("Unsettled Orders Count: " + unsettledOrders.size());
4745 varun.gupt 817
 
4600 varun.gupt 818
		ByteArrayOutputStream baosXLS = new ByteArrayOutputStream();
4745 varun.gupt 819
 
4600 varun.gupt 820
	    Workbook wb = new HSSFWorkbook();
4875 varun.gupt 821
 
4600 varun.gupt 822
	    //Create the style for the title row
823
	    Font font = wb.createFont();
824
	    font.setBoldweight(Font.BOLDWEIGHT_BOLD);
825
	    CellStyle boldStyle = wb.createCellStyle();
826
	    boldStyle.setFont(font);
827
 
828
	    CellStyle rightAlignStyle = wb.createCellStyle();
829
	    rightAlignStyle.setAlignment(CellStyle.ALIGN_RIGHT);
830
 
5189 varun.gupt 831
		Sheet orderSheet = wb.createSheet("Settled Orders");
832
		Sheet unsettledOrderSheet = wb.createSheet("Unsettled Orders");
4875 varun.gupt 833
		Sheet reshippedOrderSheet = wb.createSheet("Reshipped");
5189 varun.gupt 834
//		Sheet mismatchSheet = wb.createSheet("Mismatches");
4600 varun.gupt 835
 
5189 varun.gupt 836
	    populateOrderSheet(vendorId, orderSheet, boldStyle, rightAlignStyle);
837
		populateUnsettledOrderSheet(unsettledOrderSheet);
838
	    populateReshippedOrderSheet(reshippedOrders, reshippedOrderSheet);
5020 varun.gupt 839
//	    populateMismatchSheet(mismatchSheet);
4600 varun.gupt 840
 
841
		// Write the workbook to the output stream
842
		try {
843
			wb.write(baosXLS);
844
			baosXLS.close();
845
		} catch (IOException e) {
846
			logger.error("Unable to write the hotspot reconciliation report to the byte array", e);
5189 varun.gupt 847
		}
4600 varun.gupt 848
		return baosXLS;
849
	}
850
 
851
	private void populateMismatchSheet(Sheet sheet)	{
852
	    int serialNo = 0;
853
		Row titleRow = sheet.createRow(serialNo ++);
854
	    Cell titleCell = titleRow.createCell(0);
855
	    titleCell.setCellValue("Order Reconciliation Report (Mis-matches)");
856
 
857
	    sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 4));
858
	    sheet.createRow(serialNo ++);
859
 
860
	    Row headerRow = sheet.createRow(serialNo ++);
861
	    headerRow.createCell(OrderMismatchColumn.ORDER_ID.getValue()).setCellValue("Order Id");
862
	    headerRow.createCell(OrderMismatchColumn.EXPECTED_COLLECTION.getValue()).setCellValue("Expected Collection");
863
	    headerRow.createCell(OrderMismatchColumn.ACTUAL_COLLECTION.getValue()).setCellValue("Actual Collection");
864
 
865
	    for (long orderId: misMatches.keySet())	{
866
	    	Row contentRow = sheet.createRow(serialNo ++);
867
	    	contentRow.createCell(OrderMismatchColumn.ORDER_ID.getValue()).setCellValue(orderId);
868
	    	contentRow.createCell(OrderMismatchColumn.EXPECTED_COLLECTION.getValue()).setCellValue(misMatches.get(orderId).get("expected"));
869
	    	contentRow.createCell(OrderMismatchColumn.ACTUAL_COLLECTION.getValue()).setCellValue(misMatches.get(orderId).get("actual"));
870
	    }
871
	}
872
 
4875 varun.gupt 873
	private void populateReshippedOrderSheet(List<Order> orders, Sheet sheet) {
874
	    short serialNo = 0;
875
 
876
	    // Create the title row and put all the titles in it. Rows are 0 based.
877
	    Row titleRow = sheet.createRow(serialNo ++);
878
	    Cell titleCell = titleRow.createCell(0);
879
	    titleCell.setCellValue("Reshipped Orders");
880
 
881
	    sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 6));
882
 
883
	    sheet.createRow(serialNo ++);
884
 
885
	    Row headerRow = sheet.createRow(serialNo ++);
886
	    headerRow.createCell(OrderReportColumn.ORDER_ID.getValue()).setCellValue("Order Id");
887
	    headerRow.createCell(OrderReportColumn.ORDER_DATE.getValue()).setCellValue("Order Date");
888
	    headerRow.createCell(OrderReportColumn.BILLING_NUMBER.getValue()).setCellValue("Billing Number");
889
	    headerRow.createCell(OrderReportColumn.BILLING_DATE.getValue()).setCellValue("Billing Date");
890
	    headerRow.createCell(OrderReportColumn.DELIVERY_DATE.getValue()).setCellValue("Delivery Date");
891
	    headerRow.createCell(OrderReportColumn.SETTLEMENT_DATE.getValue()).setCellValue("Settlement Date");
892
	    headerRow.createCell(OrderReportColumn.BRAND.getValue()).setCellValue("Brand");
893
	    headerRow.createCell(OrderReportColumn.MODEL_NAME.getValue()).setCellValue("Model Name");
894
	    headerRow.createCell(OrderReportColumn.MODEL_NUMBER.getValue()).setCellValue("Model Number");
895
	    headerRow.createCell(OrderReportColumn.COLOR.getValue()).setCellValue("Color");
896
	    headerRow.createCell(OrderReportColumn.QUANTITY.getValue()).setCellValue("Quantity");
897
	    headerRow.createCell(OrderReportColumn.UNIT_TRANSFER_PRICE.getValue()).setCellValue("Unit Transfer Price");
898
	    headerRow.createCell(OrderReportColumn.UNIT_SELLING_PRICE.getValue()).setCellValue("Unit Selling Price");
899
	    headerRow.createCell(OrderReportColumn.TOTAL_TRANSFER_PRICE.getValue()).setCellValue("Total Transfer Price");
900
	    headerRow.createCell(OrderReportColumn.TOTAL_SELLING_PRICE.getValue()).setCellValue("Total Selling Price");
901
	    headerRow.createCell(OrderReportColumn.CURRENT_STATUS.getValue()).setCellValue("Current Status");
902
	    headerRow.createCell(OrderReportColumn.PAYMENT_TYPE.getValue()).setCellValue("Payment Type");
903
	    headerRow.createCell(OrderReportColumn.PAYMENT_STATUS.getValue()).setCellValue("Payment Status");
904
	    headerRow.createCell(OrderReportColumn.PAYMENT_ID.getValue()).setCellValue("Payment Id");
905
	    headerRow.createCell(OrderReportColumn.COUPON_CODE.getValue()).setCellValue("Coupon Code");
906
//	    headerRow.createCell(OrderReportColumn.COUPON_CATEGORY.getValue()).setCellValue("Coupon Category");
907
//	    headerRow.createCell(OrderReportColumn.DISCOUNT.getValue()).setCellValue("Discount");
908
 
909
	    sheet.createRow(serialNo ++);
910
 
911
		TransactionClient tsc;
912
    	PaymentClient psc;
913
    	LogisticsClient lsc;
914
 
915
		try {
916
			tsc = new TransactionClient();
917
			in.shop2020.model.v1.order.TransactionService.Client transactionClient = tsc.getClient();
918
 
919
			psc = new PaymentClient();
920
	    	in.shop2020.payments.PaymentService.Client paymentClient = psc.getClient();
921
 
922
	    	lsc = new LogisticsClient();
923
	    	in.shop2020.logistics.LogisticsService.Client logisticsClient = lsc.getClient();
924
 
925
	    	Map<Long, String> codProviders = new HashMap<Long, String>();
926
 
927
	    	for (Provider provider: logisticsClient.getAllProviders())	{
928
	    		codProviders.put(provider.getId(), provider.getName());
929
	    	}
930
 
931
	    	List<PaymentGateway> tPaymentGateways = paymentClient.getActivePaymentGateways();
932
	    	Map<Long, String> paymentGateways = new HashMap<Long, String>();
933
 
934
	    	for (PaymentGateway tPaymentGateway: tPaymentGateways)	{
935
	    		paymentGateways.put(tPaymentGateway.getId(), tPaymentGateway.getName());
936
	    	}
937
 
938
			int countMultipleOrderTxns = 0;
939
 
940
			for (Order order: orders)	{
941
			    logger.info("For order: " + order.getId());
942
 
943
			    LineItem lineItem = order.getLineitems().get(0);
944
			    double transferPrice = lineItem.getTransfer_price();
945
			    Payment payment = null;
946
 
947
			    try	{
948
			    	if(order.isCod())	{
949
			    		payment = paymentClient.getPaymentForTxnId(order.getTransactionId()).get(0);
950
			    	} else	{
951
			    		payment = paymentClient.getSuccessfulPaymentForTxnId(order.getTransactionId());
952
			    	}
953
				    logger.info("getSuccessfulPaymentForTxnId, " + order.getTransactionId() + ": " + payment);
954
 
955
			    } catch (TApplicationException e)	{
956
			    	orderIdsWithoutSuccess.add(order.getId());
957
			    	String errMsg = "Exception while getting successfull payment for transaction Id, " + order.getTransactionId(); 
958
					logger.error(errMsg, e);
959
					addActionError(errMsg);
960
				}
961
 
962
			    Transaction txn = transactionClient.getTransaction(order.getTransactionId());
963
			    PaymentSettlement paymentSettlement = null;
964
			    String paymentType = null;
965
 
966
			    if(payment != null)	{
5189 varun.gupt 967
//			    	paymentSettlement = transactionClient.getSettlementForPaymentId(payment.getPaymentId());
968
//			    	paymentType = paymentGateways.get(payment.getGatewayId());
4875 varun.gupt 969
			    }
970
 
971
	            double totalSellingPrice = lineItem.getTotal_price();
972
	            double serviceTax = 0.0;
973
	            double otherCollectionCharges = 0.0;
974
	            double netCollection = 0.0;
975
 
976
	            if(paymentSettlement != null)	{
977
		            serviceTax = paymentSettlement.getServiceTax();
978
		            otherCollectionCharges = paymentSettlement.getOtherCharges();
979
		            netCollection = paymentSettlement.getNetCollection();
980
	            }
981
 
982
	            if (netCollection < 0.0)	{
983
	            	paymentType = paymentType + "-REFUND";
984
	            }
985
 
986
		    	Row contentRow = sheet.createRow(serialNo++);
987
	            contentRow.createCell(OrderReportColumn.ORDER_ID.getValue()).setCellValue(order.getId());
988
	            contentRow.createCell(OrderReportColumn.ORDER_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getCreated_timestamp())));
989
			    contentRow.createCell(OrderReportColumn.BILLING_NUMBER.getValue()).setCellValue(order.getInvoice_number());
990
			    contentRow.createCell(OrderReportColumn.BILLING_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getBilling_timestamp())));
991
			    contentRow.createCell(OrderReportColumn.DELIVERY_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getDelivery_timestamp())));
992
			    contentRow.createCell(OrderReportColumn.BRAND.getValue()).setCellValue(getValueForEmptyString(lineItem.getBrand()));
993
			    contentRow.createCell(OrderReportColumn.MODEL_NAME.getValue()).setCellValue(getValueForEmptyString(lineItem.getModel_name()));
994
			    contentRow.createCell(OrderReportColumn.MODEL_NUMBER.getValue()).setCellValue(getValueForEmptyString(lineItem.getModel_number()));
995
			    contentRow.createCell(OrderReportColumn.COLOR.getValue()).setCellValue(getValueForEmptyString(lineItem.getColor()));
996
			    contentRow.createCell(OrderReportColumn.QUANTITY.getValue()).setCellValue(lineItem.getQuantity());
997
			    contentRow.createCell(OrderReportColumn.UNIT_TRANSFER_PRICE.getValue()).setCellValue(transferPrice);
998
			    contentRow.createCell(OrderReportColumn.UNIT_SELLING_PRICE.getValue()).setCellValue(lineItem.getUnit_price());
999
			    contentRow.createCell(OrderReportColumn.TOTAL_TRANSFER_PRICE.getValue()).setCellValue(transferPrice * lineItem.getQuantity());
1000
			    contentRow.createCell(OrderReportColumn.TOTAL_SELLING_PRICE.getValue()).setCellValue(totalSellingPrice);
1001
			    contentRow.createCell(OrderReportColumn.CURRENT_STATUS.getValue()).setCellValue(order.getStatusDescription());
1002
 
1003
		    	double refund = 0.0;
1004
 
1005
		    	if(order.isCod())	{
1006
		    		contentRow.createCell(OrderReportColumn.PAYMENT_TYPE.getValue()).setCellValue("COD - " + codProviders.get(order.getLogistics_provider_id()));
1007
		    	} else	{
1008
			    	contentRow.createCell(OrderReportColumn.PAYMENT_TYPE.getValue()).setCellValue(paymentType);
1009
		    	}
1010
 
1011
			    if (payment != null)	{
5189 varun.gupt 1012
//				    contentRow.createCell(OrderReportColumn.SETTLEMENT_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(paymentSettlement.getSettlementDate())));
1013
//			    	contentRow.createCell(OrderReportColumn.PAYMENT_STATUS.getValue()).setCellValue(payment.getStatus().name());
1014
//			    	contentRow.createCell(OrderReportColumn.PAYMENT_ID.getValue()).setCellValue(payment.getPaymentId());
4875 varun.gupt 1015
			    }
1016
			    contentRow.createCell(OrderReportColumn.COUPON_CODE.getValue()).setCellValue(txn.getCoupon_code());
1017
			}
1018
 
1019
		    logger.info("Order Ids where no successful payment was found: " + orderIdsWithoutSuccess.size());
1020
		    logger.info(orderIdsWithoutSuccess.toString());
1021
 
1022
	    	sheet.createRow(serialNo++);
1023
 
1024
		} catch (TTransportException e) {
1025
			logger.error("TTransportException " + e);
1026
		} catch (PaymentException e) {
1027
			logger.error("PaymentException " + e);
1028
		} catch (TException e) {
1029
			logger.error("TException " + e);
1030
		} catch (TransactionServiceException e) {
1031
			logger.error("Transaction Service Exception " + e);
1032
		} catch (LogisticsServiceException e) {
1033
			addActionError("Error loading list of COD providers");
1034
			logger.error("Logistics Service Exception " + e);
1035
		}
1036
	}
1037
 
5189 varun.gupt 1038
	private void populateUnsettledOrderSheet(Sheet sheet)	{
1039
		rowCount = 0;
5020 varun.gupt 1040
 
5189 varun.gupt 1041
	    Row headerRow = sheet.createRow(rowCount ++);
1042
	    headerRow.createCell(OrderReportColumn.ORDER_ID.getValue()).setCellValue("Order Id");
1043
	    headerRow.createCell(OrderReportColumn.ORDER_DATE.getValue()).setCellValue("Order Date");
1044
	    headerRow.createCell(OrderReportColumn.BILLING_NUMBER.getValue()).setCellValue("Billing Number");
1045
	    headerRow.createCell(OrderReportColumn.BILLING_DATE.getValue()).setCellValue("Billing Date");
1046
	    headerRow.createCell(OrderReportColumn.DELIVERY_DATE.getValue()).setCellValue("Delivery Date");
1047
	    headerRow.createCell(OrderReportColumn.SETTLEMENT_DATE.getValue()).setCellValue("Settlement Date");
1048
	    headerRow.createCell(OrderReportColumn.BRAND.getValue()).setCellValue("Brand");
1049
	    headerRow.createCell(OrderReportColumn.MODEL_NAME.getValue()).setCellValue("Model Name");
1050
	    headerRow.createCell(OrderReportColumn.MODEL_NUMBER.getValue()).setCellValue("Model Number");
1051
	    headerRow.createCell(OrderReportColumn.COLOR.getValue()).setCellValue("Color");
1052
	    headerRow.createCell(OrderReportColumn.QUANTITY.getValue()).setCellValue("Quantity");
1053
	    headerRow.createCell(OrderReportColumn.UNIT_TRANSFER_PRICE.getValue()).setCellValue("Unit Transfer Price");
1054
	    headerRow.createCell(OrderReportColumn.UNIT_SELLING_PRICE.getValue()).setCellValue("Unit Selling Price");
1055
	    headerRow.createCell(OrderReportColumn.TOTAL_TRANSFER_PRICE.getValue()).setCellValue("Total Transfer Price");
1056
	    headerRow.createCell(OrderReportColumn.TOTAL_SELLING_PRICE.getValue()).setCellValue("Total Selling Price");
1057
	    headerRow.createCell(OrderReportColumn.CURRENT_STATUS.getValue()).setCellValue("Current Status");
1058
	    headerRow.createCell(OrderReportColumn.PAYMENT_TYPE.getValue()).setCellValue("Payment Type");
1059
	    headerRow.createCell(OrderReportColumn.PAYMENT_STATUS.getValue()).setCellValue("Payment Status");
1060
	    headerRow.createCell(OrderReportColumn.PAYMENT_ID.getValue()).setCellValue("Payment Id");
1061
	    headerRow.createCell(OrderReportColumn.COUPON_CODE.getValue()).setCellValue("Coupon Code");
1062
 
1063
	    sheet.createRow(rowCount ++);
1064
 
1065
    	PaymentClient psc;
1066
    	logger.info("unsettledOrders count: " + unsettledOrders.size());
1067
 
1068
    	try	{
1069
			psc = new PaymentClient();
1070
	    	in.shop2020.payments.PaymentService.Client paymentClient = psc.getClient();
1071
 
1072
			for (Order order: unsettledOrders)	{
1073
				Row contentRow = sheet.createRow(rowCount ++);
1074
				LineItem lineItem = order.getLineitems().get(0);
1075
				Payment pmt = null;
1076
 
1077
				if(order.isCod())	{
1078
					pmt = paymentClient.getPaymentForTxnId(order.getTransactionId()).get(0);
1079
				} else	{
1080
					pmt = paymentClient.getSuccessfulPaymentForTxnId(order.getTransactionId());
1081
				}
1082
 
1083
		        contentRow.createCell(OrderReportColumn.ORDER_ID.getValue()).setCellValue(order.getId());
1084
		        contentRow.createCell(OrderReportColumn.ORDER_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getCreated_timestamp())));
1085
			    contentRow.createCell(OrderReportColumn.BILLING_NUMBER.getValue()).setCellValue(order.getInvoice_number());
1086
			    contentRow.createCell(OrderReportColumn.BILLING_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getBilling_timestamp())));
1087
			    contentRow.createCell(OrderReportColumn.DELIVERY_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getDelivery_timestamp())));
1088
			    contentRow.createCell(OrderReportColumn.BRAND.getValue()).setCellValue(getValueForEmptyString(lineItem.getBrand()));
1089
			    contentRow.createCell(OrderReportColumn.MODEL_NAME.getValue()).setCellValue(getValueForEmptyString(lineItem.getModel_name()));
1090
			    contentRow.createCell(OrderReportColumn.MODEL_NUMBER.getValue()).setCellValue(getValueForEmptyString(lineItem.getModel_number()));
1091
			    contentRow.createCell(OrderReportColumn.COLOR.getValue()).setCellValue(getValueForEmptyString(lineItem.getColor()));
1092
			    contentRow.createCell(OrderReportColumn.QUANTITY.getValue()).setCellValue(lineItem.getQuantity());
1093
			    contentRow.createCell(OrderReportColumn.UNIT_TRANSFER_PRICE.getValue()).setCellValue(lineItem.getTransfer_price());
1094
			    contentRow.createCell(OrderReportColumn.UNIT_SELLING_PRICE.getValue()).setCellValue(lineItem.getUnit_price());
1095
			    contentRow.createCell(OrderReportColumn.TOTAL_TRANSFER_PRICE.getValue()).setCellValue(lineItem.getTransfer_price() * lineItem.getQuantity());
1096
			    contentRow.createCell(OrderReportColumn.TOTAL_SELLING_PRICE.getValue()).setCellValue(lineItem.getTotal_price());
1097
			    contentRow.createCell(OrderReportColumn.CURRENT_STATUS.getValue()).setCellValue(order.getStatusDescription());
1098
 
1099
			    if(pmt.getGatewayId() == 4)	{
1100
			    	contentRow.createCell(OrderReportColumn.PAYMENT_TYPE.getValue()).setCellValue("COD-" + codProviders.get(order.getLogistics_provider_id()));
1101
			    } else	{
1102
			    	contentRow.createCell(OrderReportColumn.PAYMENT_TYPE.getValue()).setCellValue(paymentGateways.get(pmt.getGatewayId()));
1103
			    }
1104
		    	contentRow.createCell(OrderReportColumn.PAYMENT_STATUS.getValue()).setCellValue(pmt.getStatus().name());
1105
		    	contentRow.createCell(OrderReportColumn.PAYMENT_ID.getValue()).setCellValue(pmt.getPaymentId());
1106
	    	}
1107
	    } catch (Exception e) {
1108
			e.printStackTrace();
1109
		}
1110
	}
1111
 
1112
	private void populateOrderSheet(long vendorId, Sheet sheet, CellStyle style, CellStyle rightAlignStyle) {
1113
 
5020 varun.gupt 1114
	    // Create the title row and put all the titles in it. Rows are 0 based
1115
	    Row titleRow = sheet.createRow(rowCount ++);
4600 varun.gupt 1116
	    Cell titleCell = titleRow.createCell(0);
5020 varun.gupt 1117
	    titleCell.setCellValue("Order Reconciliation Report");
4600 varun.gupt 1118
	    titleCell.setCellStyle(style);
1119
 
5020 varun.gupt 1120
	    sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 4));
4600 varun.gupt 1121
 
5020 varun.gupt 1122
	    sheet.createRow(rowCount ++);
4600 varun.gupt 1123
 
5020 varun.gupt 1124
	    Row headerRow = sheet.createRow(rowCount ++);
4600 varun.gupt 1125
	    headerRow.createCell(OrderReportColumn.ORDER_ID.getValue()).setCellValue("Order Id");
1126
	    headerRow.createCell(OrderReportColumn.ORDER_DATE.getValue()).setCellValue("Order Date");
1127
	    headerRow.createCell(OrderReportColumn.BILLING_NUMBER.getValue()).setCellValue("Billing Number");
1128
	    headerRow.createCell(OrderReportColumn.BILLING_DATE.getValue()).setCellValue("Billing Date");
1129
	    headerRow.createCell(OrderReportColumn.DELIVERY_DATE.getValue()).setCellValue("Delivery Date");
1130
	    headerRow.createCell(OrderReportColumn.SETTLEMENT_DATE.getValue()).setCellValue("Settlement Date");
1131
	    headerRow.createCell(OrderReportColumn.BRAND.getValue()).setCellValue("Brand");
1132
	    headerRow.createCell(OrderReportColumn.MODEL_NAME.getValue()).setCellValue("Model Name");
1133
	    headerRow.createCell(OrderReportColumn.MODEL_NUMBER.getValue()).setCellValue("Model Number");
1134
	    headerRow.createCell(OrderReportColumn.COLOR.getValue()).setCellValue("Color");
1135
	    headerRow.createCell(OrderReportColumn.QUANTITY.getValue()).setCellValue("Quantity");
1136
	    headerRow.createCell(OrderReportColumn.UNIT_TRANSFER_PRICE.getValue()).setCellValue("Unit Transfer Price");
1137
	    headerRow.createCell(OrderReportColumn.UNIT_SELLING_PRICE.getValue()).setCellValue("Unit Selling Price");
1138
	    headerRow.createCell(OrderReportColumn.TOTAL_TRANSFER_PRICE.getValue()).setCellValue("Total Transfer Price");
1139
	    headerRow.createCell(OrderReportColumn.TOTAL_SELLING_PRICE.getValue()).setCellValue("Total Selling Price");
1140
	    headerRow.createCell(OrderReportColumn.CURRENT_STATUS.getValue()).setCellValue("Current Status");
1141
	    headerRow.createCell(OrderReportColumn.PAYMENT_TYPE.getValue()).setCellValue("Payment Type");
4745 varun.gupt 1142
	    headerRow.createCell(OrderReportColumn.PAYMENT_STATUS.getValue()).setCellValue("Payment Status");
4600 varun.gupt 1143
	    headerRow.createCell(OrderReportColumn.PAYMENT_ID.getValue()).setCellValue("Payment Id");
1144
	    headerRow.createCell(OrderReportColumn.COUPON_CODE.getValue()).setCellValue("Coupon Code");
1145
	    headerRow.createCell(OrderReportColumn.SERVICE_TAX.getValue()).setCellValue("Service Tax");
1146
	    headerRow.createCell(OrderReportColumn.OTHER_CHARGES.getValue()).setCellValue("Other Charges");
1147
	    headerRow.createCell(OrderReportColumn.NET_COLLECTION.getValue()).setCellValue("Net Collection");
1148
 
5020 varun.gupt 1149
	    sheet.createRow(rowCount ++);
4600 varun.gupt 1150
 
1151
		TransactionClient tsc;
1152
    	PaymentClient psc;
4734 varun.gupt 1153
    	LogisticsClient lsc;
4745 varun.gupt 1154
 
4600 varun.gupt 1155
		try {
1156
			tsc = new TransactionClient();
1157
			in.shop2020.model.v1.order.TransactionService.Client transactionClient = tsc.getClient();
5189 varun.gupt 1158
 
5020 varun.gupt 1159
	    	lsc = new LogisticsClient();
1160
	    	in.shop2020.logistics.LogisticsService.Client logisticsClient = lsc.getClient();
5189 varun.gupt 1161
 
4600 varun.gupt 1162
			psc = new PaymentClient();
1163
	    	in.shop2020.payments.PaymentService.Client paymentClient = psc.getClient();
1164
 
5020 varun.gupt 1165
	    	List<PaymentGateway> tPaymentGateways = paymentClient.getActivePaymentGateways();
4734 varun.gupt 1166
 
5020 varun.gupt 1167
	    	for (PaymentGateway tPaymentGateway: tPaymentGateways)	{
1168
	    		paymentGateways.put(tPaymentGateway.getId(), tPaymentGateway.getName());
1169
	    	}
4734 varun.gupt 1170
 
1171
	    	for (Provider provider: logisticsClient.getAllProviders())	{
1172
	    		codProviders.put(provider.getId(), provider.getName());
1173
	    	}
1174
 
5098 varun.gupt 1175
	    	class PaymentSettlementMap	{
1176
	    		public PaymentSettlement settlement;
1177
	    		public Payment payment;
1178
	    		public Transaction transaction;
1179
	    		public Order order;
1180
 
1181
	    		public PaymentSettlementMap(PaymentSettlement settlement, Payment pmt, Transaction txn, Order order)	{
1182
	    			this.settlement = settlement;
1183
	    			this.payment = pmt;
1184
	    			this.transaction = txn;
1185
	    			this.order = order;
1186
	    		}
1187
 
1188
	    		public PaymentSettlementMap(PaymentSettlement settlement, Payment pmt, Transaction txn)	{
1189
	    			this.settlement = settlement;
1190
	    			this.payment = pmt;
1191
	    			this.transaction = txn;
1192
	    		}
1193
	    	}
1194
 
5189 varun.gupt 1195
	    	for (PaymentSettlement paymentSettlement: paymentSettlementsMap.values())	{
5020 varun.gupt 1196
 
1197
    			try {
1198
    				if(paymentSettlement.getPaymentGatewayId() == 4)	{	// If COD
1199
	    				Order order = transactionClient.getOrder(paymentSettlement.getReferenceId());
1200
	    				Transaction txn = transactionClient.getTransaction(order.getTransactionId());
1201
	    				Payment payment = paymentClient.getPaymentForTxnId(txn.getId()).get(0);
1202
 
1203
		    			if (order.getVendorId() == vendorId)	{
1204
					    	Row contentRow = sheet.createRow(rowCount ++);
1205
					    	outputCODRow(contentRow, paymentSettlement, order, txn, payment);
1206
		    			}
1207
    				} else	{	// If prepaid
5189 varun.gupt 1208
    					logger.info("ReferenceId: " + paymentSettlement.getReferenceId());
5020 varun.gupt 1209
    					Payment payment = paymentClient.getPayment(paymentSettlement.getReferenceId());
1210
    					Transaction txn = transactionClient.getTransaction(payment.getMerchantTxnId());
1211
 
1212
    					outputPrepaidTransactionRows(sheet, vendorId, paymentSettlement, txn, payment);
1213
    				}
1214
    			} catch (TransactionServiceException e) {
1215
					logger.error("TransactionServiceException " + e);
1216
				} catch (TException e) {
5189 varun.gupt 1217
					e.printStackTrace();
5020 varun.gupt 1218
				} catch (PaymentException e) {
1219
					logger.error("PaymentException " + e);
1220
				}
4600 varun.gupt 1221
	    	}
5020 varun.gupt 1222
	    	rowCount ++;
1223
 
5189 varun.gupt 1224
	    	logger.info("Refunded Order Count: " + refundedOrders.size());
1225
 
1226
	    	for (Order order: refundedOrders)	{
5020 varun.gupt 1227
	    		try {
5189 varun.gupt 1228
					Transaction txn = transactionClient.getTransaction(order.getTransactionId());
1229
	    			Payment payment = paymentClient.getSuccessfulPaymentForTxnId(txn.getId());
1230
	    			PaymentSettlement paymentSettlement = transactionClient.getSettlementForReferenceId(payment.getPaymentId(), true);
5020 varun.gupt 1231
 
1232
					outputRefundRows(sheet, vendorId, paymentSettlement, txn, payment);
1233
    			} catch (TransactionServiceException e) {
1234
					logger.error("TransactionServiceException " + e);
1235
				} catch (TException e) {
1236
					logger.error("TException " + e);
1237
				} catch (PaymentException e) {
1238
					logger.error("PaymentException " + e);
4875 varun.gupt 1239
				}
5020 varun.gupt 1240
	    	}
5189 varun.gupt 1241
//	    	for (PaymentSettlement paymentSettlement: refundSettlements)	{
1242
//	    		try {
1243
//	    			Payment payment = paymentClient.getPayment(paymentSettlement.getReferenceId());
1244
//					Transaction txn = transactionClient.getTransaction(payment.getMerchantTxnId());
1245
//					
1246
//					outputRefundRows(sheet, vendorId, paymentSettlement, txn, payment);
1247
//    			} catch (TransactionServiceException e) {
1248
//					logger.error("TransactionServiceException " + e);
1249
//				} catch (TException e) {
1250
//					logger.error("TException " + e);
1251
//				} catch (PaymentException e) {
1252
//					logger.error("PaymentException " + e);
1253
//				}
1254
//	    	}
5020 varun.gupt 1255
		} catch (TTransportException e) {
1256
			logger.error("TTransportException", e);
1257
		} catch (LogisticsServiceException e) {
1258
			logger.error("LogisticsServiceException" + e);
1259
		} catch (TException e) {
1260
			logger.error("TException" + e);
1261
		} catch (PaymentException e) {
1262
			logger.error("PaymentException" + e);
1263
		}
1264
	}
1265
 
1266
	private void outputRefundRows(Sheet sheet, long vendorId, PaymentSettlement paymentSettlement, Transaction txn, Payment payment)	{
5189 varun.gupt 1267
		logger.info("Printing Refunded orders for pmt Id, " + payment.getPaymentId());
5020 varun.gupt 1268
 
1269
		boolean isFirstOrderForTransaction = true;
1270
 
1271
		for (Order order: txn.getOrders())	{
1272
			if(order.getVendorId() == vendorId && refundOrderStatuses.contains(order.getStatus()))	{
1273
		    	Row contentRow = sheet.createRow(rowCount ++);
1274
		    	LineItem lineItem = order.getLineitems().get(0);
4734 varun.gupt 1275
 
5020 varun.gupt 1276
		        contentRow.createCell(OrderReportColumn.ORDER_ID.getValue()).setCellValue(order.getId());
1277
		        contentRow.createCell(OrderReportColumn.ORDER_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getCreated_timestamp())));
1278
			    contentRow.createCell(OrderReportColumn.BILLING_NUMBER.getValue()).setCellValue(order.getInvoice_number());
1279
			    contentRow.createCell(OrderReportColumn.BILLING_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getBilling_timestamp())));
1280
			    contentRow.createCell(OrderReportColumn.DELIVERY_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getDelivery_timestamp())));
1281
			    contentRow.createCell(OrderReportColumn.BRAND.getValue()).setCellValue(getValueForEmptyString(lineItem.getBrand()));
1282
			    contentRow.createCell(OrderReportColumn.MODEL_NAME.getValue()).setCellValue(getValueForEmptyString(lineItem.getModel_name()));
1283
			    contentRow.createCell(OrderReportColumn.MODEL_NUMBER.getValue()).setCellValue(getValueForEmptyString(lineItem.getModel_number()));
1284
			    contentRow.createCell(OrderReportColumn.COLOR.getValue()).setCellValue(getValueForEmptyString(lineItem.getColor()));
1285
			    contentRow.createCell(OrderReportColumn.QUANTITY.getValue()).setCellValue(lineItem.getQuantity());
1286
			    contentRow.createCell(OrderReportColumn.UNIT_TRANSFER_PRICE.getValue()).setCellValue(lineItem.getTransfer_price());
1287
			    contentRow.createCell(OrderReportColumn.UNIT_SELLING_PRICE.getValue()).setCellValue(lineItem.getUnit_price());
1288
			    contentRow.createCell(OrderReportColumn.TOTAL_TRANSFER_PRICE.getValue()).setCellValue(lineItem.getTransfer_price() * lineItem.getQuantity());
1289
			    contentRow.createCell(OrderReportColumn.TOTAL_SELLING_PRICE.getValue()).setCellValue(lineItem.getTotal_price());
1290
			    contentRow.createCell(OrderReportColumn.CURRENT_STATUS.getValue()).setCellValue(order.getStatusDescription());
1291
		    	contentRow.createCell(OrderReportColumn.PAYMENT_TYPE.getValue()).setCellValue(paymentGateways.get(payment.getGatewayId()));
1292
			    contentRow.createCell(OrderReportColumn.SETTLEMENT_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(paymentSettlement.getSettlementDate())));
1293
			    contentRow.createCell(OrderReportColumn.COUPON_CODE.getValue()).setCellValue(txn.getCoupon_code());
1294
		    	contentRow.createCell(OrderReportColumn.PAYMENT_STATUS.getValue()).setCellValue(payment.getStatus().name());
1295
		    	contentRow.createCell(OrderReportColumn.PAYMENT_ID.getValue()).setCellValue(payment.getPaymentId());
1296
 
1297
		    	if(isFirstOrderForTransaction)	{
1298
			    	contentRow.createCell(OrderReportColumn.SERVICE_TAX.getValue()).setCellValue(paymentSettlement.getServiceTax());
1299
				    contentRow.createCell(OrderReportColumn.OTHER_CHARGES.getValue()).setCellValue(paymentSettlement.getOtherCharges());
1300
				    contentRow.createCell(OrderReportColumn.NET_COLLECTION.getValue()).setCellValue(paymentSettlement.getNetCollection());
1301
				    isFirstOrderForTransaction = false;
1302
		    	}
4715 varun.gupt 1303
			}
5020 varun.gupt 1304
		}
1305
	}
5098 varun.gupt 1306
 
5020 varun.gupt 1307
	private void outputPrepaidTransactionRows(Sheet sheet, long vendorId, PaymentSettlement paymentSettlement, Transaction txn, Payment payment)	{
1308
		logger.info("Printing orders for pmt Id, " + payment.getPaymentId());
1309
 
1310
		boolean isFirstOrderForTransaction = true;
1311
 
1312
		for (Order order: txn.getOrders())	{
5189 varun.gupt 1313
			if(order.getVendorId() == vendorId && ! order.isVendorPaid())	{
1314
 
1315
				if(refundOrderStatuses.contains(order.getStatus()))	{
1316
 
1317
					refundedOrders.add(order);
1318
				}
5020 varun.gupt 1319
		    	Row contentRow = sheet.createRow(rowCount ++);
1320
		    	LineItem lineItem = order.getLineitems().get(0);
4734 varun.gupt 1321
 
5020 varun.gupt 1322
		        contentRow.createCell(OrderReportColumn.ORDER_ID.getValue()).setCellValue(order.getId());
1323
		        contentRow.createCell(OrderReportColumn.ORDER_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getCreated_timestamp())));
1324
			    contentRow.createCell(OrderReportColumn.BILLING_NUMBER.getValue()).setCellValue(order.getInvoice_number());
1325
			    contentRow.createCell(OrderReportColumn.BILLING_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getBilling_timestamp())));
1326
			    contentRow.createCell(OrderReportColumn.DELIVERY_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getDelivery_timestamp())));
1327
			    contentRow.createCell(OrderReportColumn.BRAND.getValue()).setCellValue(getValueForEmptyString(lineItem.getBrand()));
1328
			    contentRow.createCell(OrderReportColumn.MODEL_NAME.getValue()).setCellValue(getValueForEmptyString(lineItem.getModel_name()));
1329
			    contentRow.createCell(OrderReportColumn.MODEL_NUMBER.getValue()).setCellValue(getValueForEmptyString(lineItem.getModel_number()));
1330
			    contentRow.createCell(OrderReportColumn.COLOR.getValue()).setCellValue(getValueForEmptyString(lineItem.getColor()));
1331
			    contentRow.createCell(OrderReportColumn.QUANTITY.getValue()).setCellValue(lineItem.getQuantity());
1332
			    contentRow.createCell(OrderReportColumn.UNIT_TRANSFER_PRICE.getValue()).setCellValue(lineItem.getTransfer_price());
1333
			    contentRow.createCell(OrderReportColumn.UNIT_SELLING_PRICE.getValue()).setCellValue(lineItem.getUnit_price());
1334
			    contentRow.createCell(OrderReportColumn.TOTAL_TRANSFER_PRICE.getValue()).setCellValue(lineItem.getTransfer_price() * lineItem.getQuantity());
1335
			    contentRow.createCell(OrderReportColumn.TOTAL_SELLING_PRICE.getValue()).setCellValue(lineItem.getTotal_price());
1336
			    contentRow.createCell(OrderReportColumn.CURRENT_STATUS.getValue()).setCellValue(order.getStatusDescription());
1337
		    	contentRow.createCell(OrderReportColumn.PAYMENT_TYPE.getValue()).setCellValue(paymentGateways.get(payment.getGatewayId()));
1338
			    contentRow.createCell(OrderReportColumn.SETTLEMENT_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(paymentSettlement.getSettlementDate())));
1339
			    contentRow.createCell(OrderReportColumn.COUPON_CODE.getValue()).setCellValue(txn.getCoupon_code());
1340
		    	contentRow.createCell(OrderReportColumn.PAYMENT_STATUS.getValue()).setCellValue(payment.getStatus().name());
1341
		    	contentRow.createCell(OrderReportColumn.PAYMENT_ID.getValue()).setCellValue(payment.getPaymentId());
4715 varun.gupt 1342
 
5020 varun.gupt 1343
		    	if(isFirstOrderForTransaction)	{
1344
			    	contentRow.createCell(OrderReportColumn.SERVICE_TAX.getValue()).setCellValue(paymentSettlement.getServiceTax());
1345
				    contentRow.createCell(OrderReportColumn.OTHER_CHARGES.getValue()).setCellValue(paymentSettlement.getOtherCharges());
4715 varun.gupt 1346
				    contentRow.createCell(OrderReportColumn.NET_COLLECTION.getValue()).setCellValue(paymentSettlement.getNetCollection());
5020 varun.gupt 1347
				    isFirstOrderForTransaction = false;
4715 varun.gupt 1348
		    	}
5020 varun.gupt 1349
			}
4600 varun.gupt 1350
		}
1351
	}
1352
 
5020 varun.gupt 1353
	private void outputCODRow(Row contentRow, PaymentSettlement paymentSettlement, Order order, Transaction txn, Payment payment)	{
1354
 
1355
		LineItem lineItem = order.getLineitems().get(0);
1356
 
1357
        contentRow.createCell(OrderReportColumn.ORDER_ID.getValue()).setCellValue(order.getId());
1358
        contentRow.createCell(OrderReportColumn.ORDER_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getCreated_timestamp())));
1359
	    contentRow.createCell(OrderReportColumn.BILLING_NUMBER.getValue()).setCellValue(order.getInvoice_number());
1360
	    contentRow.createCell(OrderReportColumn.BILLING_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getBilling_timestamp())));
1361
	    contentRow.createCell(OrderReportColumn.DELIVERY_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(order.getDelivery_timestamp())));
1362
	    contentRow.createCell(OrderReportColumn.BRAND.getValue()).setCellValue(getValueForEmptyString(lineItem.getBrand()));
1363
	    contentRow.createCell(OrderReportColumn.MODEL_NAME.getValue()).setCellValue(getValueForEmptyString(lineItem.getModel_name()));
1364
	    contentRow.createCell(OrderReportColumn.MODEL_NUMBER.getValue()).setCellValue(getValueForEmptyString(lineItem.getModel_number()));
1365
	    contentRow.createCell(OrderReportColumn.COLOR.getValue()).setCellValue(getValueForEmptyString(lineItem.getColor()));
1366
	    contentRow.createCell(OrderReportColumn.QUANTITY.getValue()).setCellValue(lineItem.getQuantity());
1367
	    contentRow.createCell(OrderReportColumn.UNIT_TRANSFER_PRICE.getValue()).setCellValue(lineItem.getTransfer_price());
1368
	    contentRow.createCell(OrderReportColumn.UNIT_SELLING_PRICE.getValue()).setCellValue(lineItem.getUnit_price());
1369
	    contentRow.createCell(OrderReportColumn.TOTAL_TRANSFER_PRICE.getValue()).setCellValue(lineItem.getTransfer_price() * lineItem.getQuantity());
1370
	    contentRow.createCell(OrderReportColumn.TOTAL_SELLING_PRICE.getValue()).setCellValue(lineItem.getTotal_price());
1371
	    contentRow.createCell(OrderReportColumn.CURRENT_STATUS.getValue()).setCellValue(order.getStatusDescription());
1372
    	contentRow.createCell(OrderReportColumn.PAYMENT_TYPE.getValue()).setCellValue("COD - " + codProviders.get(order.getLogistics_provider_id()));
1373
    	contentRow.createCell(OrderReportColumn.SERVICE_TAX.getValue()).setCellValue(paymentSettlement.getServiceTax());
1374
	    contentRow.createCell(OrderReportColumn.OTHER_CHARGES.getValue()).setCellValue(paymentSettlement.getOtherCharges());
1375
	    contentRow.createCell(OrderReportColumn.NET_COLLECTION.getValue()).setCellValue(paymentSettlement.getNetCollection());
1376
	    contentRow.createCell(OrderReportColumn.SETTLEMENT_DATE.getValue()).setCellValue(DATE_FORMAT.format(new Date(paymentSettlement.getSettlementDate())));
1377
	    contentRow.createCell(OrderReportColumn.COUPON_CODE.getValue()).setCellValue(txn.getCoupon_code());
1378
    	contentRow.createCell(OrderReportColumn.PAYMENT_STATUS.getValue()).setCellValue(payment.getStatus().name());
1379
    	contentRow.createCell(OrderReportColumn.PAYMENT_ID.getValue()).setCellValue(payment.getPaymentId());
1380
	}
1381
 
5098 varun.gupt 1382
	private void initiatializeDashboard()	{
1383
		try	{
1384
			CatalogClient csc = new CatalogClient();
1385
			Client catalogClient = csc.getClient();
1386
			OrderStatusGroups orderStatusGroups = new OrderStatusGroups();
1387
			refundOrderStatuses = orderStatusGroups.getRefundedOrders();
1388
 
1389
			vendors = catalogClient.getAllVendors();
1390
			orderIdsWithoutSuccess = new ArrayList<Long>();
1391
 
1392
			TransactionClient tsc = new TransactionClient();
1393
			in.shop2020.model.v1.order.TransactionService.Client transactionClient = tsc.getClient();
1394
 
1395
			ebsSettlementSummaries = transactionClient.getEBSSettlementSummaries();
1396
			logger.info("", ebsSettlementSummaries);
1397
 
1398
		} catch (TException e) {
1399
			logger.error("TException", e);
1400
 
1401
		} catch (TransactionServiceException e) {
1402
			logger.error("TransactionServiceException", e);
1403
		}
1404
	}
1405
 
4600 varun.gupt 1406
	public List<Vendor> getAllVendors()	{
1407
		return this.vendors;
1408
	}
1409
 
1410
	private String getValueForEmptyString(String s){
1411
		if(s==null || s.equals(""))
1412
			return "-";
1413
		else
1414
			return s; 
1415
	}
1416
 
1417
	private String getVendorName(long vendorId)	{
1418
		for (Vendor vendor: vendors)	{
1419
			if (vendor.getId() == vendorId)	return vendor.getName();
1420
		}
1421
		return null;
1422
	}
1423
 
1424
	public String getReportSource()	{
1425
		return reportSource;
1426
	}
1427
 
1428
	public void setReportSource(String reportSource)	{
1429
		this.reportSource = reportSource;
1430
	}
1431
 
1432
    public File getHdfcSettlementReport() {
1433
        return hdfcSettlementReport;
1434
    }
1435
 
1436
    public void setHdfcSettlementReport(File hdfcSettlementReport) {
1437
        this.hdfcSettlementReport = hdfcSettlementReport;
1438
    }
1439
 
1440
    public File getEbsSettlementSummary()	{
1441
    	return ebsSettlementSummary;
1442
    }
1443
 
1444
    public void setEbsSettlementSummary(File ebsSettlementSummary)	{
1445
    	this.ebsSettlementSummary = ebsSettlementSummary;
1446
    }
1447
 
1448
    public File getEbsSettlementReport()	{
1449
    	return ebsSettlementReport;
1450
    }
1451
 
1452
    public void setEbsSettlementReport(File ebsSettlementReport)	{
1453
    	this.ebsSettlementReport = ebsSettlementReport;
1454
    }
1455
 
1456
    public String getBluedartSettlementDate()	{
1457
    	return bluedartSettlementDate;
1458
    }
1459
 
1460
    public void setBluedartSettlementDate(String bluedartSettlementDate)	{
1461
    	this.bluedartSettlementDate = bluedartSettlementDate;
1462
    }
1463
 
1464
    public File getBluedartSettlementReport()	{
1465
    	return bluedartSettlementReport;
1466
    }
1467
 
1468
    public void setBluedartSettlementReport(File bluedartSettlementReport)	{
1469
    	this.bluedartSettlementReport = bluedartSettlementReport;
1470
    }
1471
 
4715 varun.gupt 1472
    public String getAramexSettlementDate()	{
1473
    	return this.aramexSettlementDate;
1474
    }
1475
 
1476
    public void setAramexSettlementDate(String aramexSettlementDate)	{
1477
    	this.aramexSettlementDate = aramexSettlementDate;
1478
    }
1479
 
1480
    public void setAramexSettlementReport(File aramexSettlementReport) {
1481
		this.aramexSettlementReport = aramexSettlementReport;
1482
	}
1483
 
1484
	public File getAramexSettlementReport() {
1485
		return aramexSettlementReport;
1486
	}
1487
 
4600 varun.gupt 1488
	@Override
4715 varun.gupt 1489
     public void setServletContext(ServletContext context) {
4600 varun.gupt 1490
        this.context = context;
1491
    }
1492
 
1493
    public String getServletContextPath() {
1494
        return context.getContextPath();
1495
    }
1496
 
1497
	@Override
1498
	public void setServletResponse(HttpServletResponse response) {
1499
		this.response = response;
1500
	}
1501
 
1502
	@Override
1503
	public void setServletRequest(HttpServletRequest request) {
1504
		this.request = request;
1505
		this.session = request.getSession();
1506
	}
1507
 
1508
	public Map<Long, String> getEBSSettlementSummaries()	{
1509
		return ebsSettlementSummaries;
1510
	}
5098 varun.gupt 1511
 
1512
	public void setOrderIdsToBeMarkedPaid(File orderIdsToBeMarkedPaid) {
1513
		this.orderIdsToBeMarkedPaid = orderIdsToBeMarkedPaid;
1514
	}
1515
 
1516
	public File getOrderIdsToBeMarkedPaid() {
1517
		return orderIdsToBeMarkedPaid;
1518
	}
4600 varun.gupt 1519
}