Subversion Repositories SmartDukaan

Rev

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