Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
493 rajveer 1
package in.shop2020.hotspot.dashbaord.server;
2
 
19015 manish.sha 3
import in.shop2020.hotspot.dashbaord.server.OrderPromisedShippingComparator;
493 rajveer 4
import in.shop2020.hotspot.dashbaord.shared.actions.Order;
19032 manish.sha 5
import in.shop2020.hotspot.dashbaord.shared.actions.OrderAlert;
19260 manish.sha 6
import in.shop2020.hotspot.dashbaord.shared.actions.OrderCategory;
493 rajveer 7
import in.shop2020.hotspot.dashbaord.shared.actions.OrderType;
2697 chandransh 8
import in.shop2020.hotspot.dashbaord.shared.actions.ReturnOrder;
19227 manish.sha 9
import in.shop2020.model.v1.inventory.InventoryService;
5945 mandeep.dh 10
import in.shop2020.model.v1.inventory.InventoryType;
18100 manish.sha 11
import in.shop2020.model.v1.inventory.WarehouseType;
5110 mandeep.dh 12
import in.shop2020.model.v1.catalog.Item;
13
import in.shop2020.model.v1.catalog.ItemType;
5945 mandeep.dh 14
import in.shop2020.model.v1.inventory.Warehouse;
914 chandransh 15
import in.shop2020.model.v1.order.LineItem;
7422 rajveer 16
import in.shop2020.model.v1.order.OrderSource;
493 rajveer 17
import in.shop2020.model.v1.order.OrderStatus;
18
import in.shop2020.model.v1.order.TransactionService.Client;
19050 manish.sha 19
import in.shop2020.hotspot.dashbaord.server.EhcacheWrapper;
5110 mandeep.dh 20
import in.shop2020.thrift.clients.CatalogClient;
5948 mandeep.dh 21
import in.shop2020.thrift.clients.InventoryClient;
3132 rajveer 22
import in.shop2020.thrift.clients.TransactionClient;
13146 manish.sha 23
import in.shop2020.thrift.clients.LogisticsClient;
493 rajveer 24
 
4411 rajveer 25
import java.io.ByteArrayOutputStream;
26
import java.io.File;
27
import java.io.FileNotFoundException;
28
import java.io.FileOutputStream;
29
import java.io.IOException;
18938 manish.sha 30
import java.text.DecimalFormat;
31
import java.text.NumberFormat;
19054 manish.sha 32
import java.text.SimpleDateFormat;
493 rajveer 33
import java.util.ArrayList;
4411 rajveer 34
import java.util.Calendar;
19004 manish.sha 35
import java.util.Collections;
493 rajveer 36
import java.util.Date;
4411 rajveer 37
import java.util.GregorianCalendar;
38
import java.util.HashMap;
493 rajveer 39
import java.util.List;
4411 rajveer 40
import java.util.Map;
19004 manish.sha 41
import java.util.Map.Entry;
19110 manish.sha 42
import java.util.Set;
493 rajveer 43
 
19050 manish.sha 44
import net.sf.ehcache.CacheManager;
45
 
4411 rajveer 46
import org.slf4j.Logger;
47
import org.slf4j.LoggerFactory;
48
 
2449 chandransh 49
/**
50
 * This class is a facade to the Transaction service and should be used to
4133 chandransh 51
 * access all order specific data which requires some kind of transformation.
2449 chandransh 52
 * 
53
 * @author Chandranshu
54
 * 
55
 */
493 rajveer 56
public class TransactionUtils {
4411 rajveer 57
	private static String courierDetailsPath = "/CourierDetailReports";
58
	private static Logger logger = LoggerFactory.getLogger(TransactionUtils.class);
19196 manish.sha 59
	private static long ALL_GREEN = 1L;
60
	private static long GREEN_AND_PURPULE = 2L;
61
	private static long GREEN_AND_IN_RED_OR_WHITE = 3L;
62
	private static long ALL_RED = 4L;
63
	private static long ALL_PURPLE = 5L;
64
	private static long PURPLE_AND_IN_RED_OR_WHITE = 6L;
65
	private static long ALL_OTHERS = 7L;
19260 manish.sha 66
	private static int categoryOrderCount = 0;
4411 rajveer 67
 
19260 manish.sha 68
 
69
	private static Map<Long, OrderCategory> categoryStrMap = new HashMap<Long, OrderCategory>();
70
 
19196 manish.sha 71
	private static enum ColorCode {
72
		GREEN,
73
		PURPLE,
74
		RED,
75
		OTHER
76
	}
77
 
19260 manish.sha 78
	static{
79
		categoryStrMap.put(ALL_GREEN, OrderCategory.READY);
80
		categoryStrMap.put(GREEN_AND_PURPULE, OrderCategory.READY);
81
		categoryStrMap.put(GREEN_AND_IN_RED_OR_WHITE, OrderCategory.REVIEW);
82
		categoryStrMap.put(ALL_RED, OrderCategory.REVIEW);
83
		categoryStrMap.put(ALL_PURPLE, OrderCategory.READY_LATER);
84
		categoryStrMap.put(PURPLE_AND_IN_RED_OR_WHITE, OrderCategory.REVIEW_LATER);
85
		categoryStrMap.put(ALL_OTHERS, OrderCategory.REVIEW_LATER);
86
	}
19196 manish.sha 87
 
19260 manish.sha 88
 
2449 chandransh 89
	/**
90
	 * The human user is concerned only with a consolidated view of actionable
91
	 * orders. Orders with different statuses in the database can be part of the
92
	 * same consolidated view. This method uses a mapping of <i>type</i> to
93
	 * <i>status</i> to get all such orders and return them as order beans.
94
	 * 
95
	 * @param type
96
	 *            The type of orders to return.
4133 chandransh 97
	 * @param offset
98
	 *            Offset to start from
99
	 * @param limit
100
	 *            No. of orders to return
2449 chandransh 101
	 * @param warehouseId
102
	 *            The warehouse for which the orders should be queried.
103
	 * @return A list of orders of the given type to be fulfilled from the given
104
	 *         warehouse
105
	 */
19260 manish.sha 106
	public static List<Order> getOrders(OrderType type, long offset, long limit, long warehouseId, long source, OrderCategory orderCategory){
2449 chandransh 107
		List<OrderStatus> statuses = getStatuses(type);
493 rajveer 108
 
109
		List<Order> orders = new ArrayList<Order>();
110
		try{
4133 chandransh 111
			TransactionClient txnClient = new TransactionClient();
112
			Client client = txnClient.getClient();
493 rajveer 113
 
114
			List<in.shop2020.model.v1.order.Order> t_orders = new ArrayList<in.shop2020.model.v1.order.Order>();
19004 manish.sha 115
			if(type==OrderType.NEW || type==OrderType.ALL_PENDING || type ==OrderType.LOW_INVENTORY || type == OrderType.PO_RAISED
116
					|| type == OrderType.REVERSAL_INITIATED || type == OrderType.NOT_AVAILABLE){
19228 manish.sha 117
				t_orders.addAll(client.getOrdersInBatchAsPromisedShipping(statuses, 0, 0, warehouseId, source));
19004 manish.sha 118
			}else{
119
				t_orders.addAll(client.getOrdersInBatch(statuses, offset, limit, warehouseId, source));
120
			}
493 rajveer 121
 
19224 manish.sha 122
			orders = getOrdersFromThirftOrders(t_orders);
123
			/*for (in.shop2020.model.v1.order.Order t_order: t_orders){
671 chandransh 124
				Order o = getOrderFromThriftOrder(t_order);
493 rajveer 125
				orders.add(o);
19224 manish.sha 126
			}*/
19004 manish.sha 127
			if(type==OrderType.NEW || type==OrderType.ALL_PENDING || type ==OrderType.LOW_INVENTORY || type == OrderType.PO_RAISED
128
					|| type == OrderType.REVERSAL_INITIATED || type == OrderType.NOT_AVAILABLE){
129
				Map<Long, List<Order>> transactionOrdersMap = new HashMap<Long, List<Order>>();
19196 manish.sha 130
				Map<Long, Map<String, Long>> transactionsColorMap = new HashMap<Long, Map<String, Long>>();
19004 manish.sha 131
				for(Order order : orders){
132
					if(transactionOrdersMap.containsKey(order.getTransactionId())){
133
						List<Order> txnOrders = transactionOrdersMap.get(order.getTransactionId());
134
						txnOrders.add(order);
135
						transactionOrdersMap.put(order.getTransactionId(), txnOrders);
136
					}else{
137
						List<Order> txnOrders = new ArrayList<Order>();
138
						txnOrders.add(order);
139
						transactionOrdersMap.put(order.getTransactionId(), txnOrders);
140
					}
19196 manish.sha 141
 
142
					if(transactionsColorMap.containsKey(order.getTransactionId())){
143
						Map<String, Long> colorMap = transactionsColorMap.get(order.getTransactionId());
144
						//SHIPPING_TIME_EXCEEDED, DELIVERY_TIME_EXCEEDED, ORDER_NOT_CONNECTED_FOR_TOO_LONG, ORDER_NOT_CONNECTED
145
						if(order.getAlert()==OrderAlert.TODAY_SHIPPING_IN_STOCK){
146
							if(colorMap.containsKey(ColorCode.GREEN.toString())){
147
								colorMap.put(ColorCode.GREEN.toString(),colorMap.get(ColorCode.GREEN.toString())+1);
148
							}else{
149
								colorMap.put(ColorCode.GREEN.toString(),1L);
150
							}
151
						}else if(order.getAlert()==OrderAlert.TODAY_SHIPPING_NOT_IN_STOCK){
152
							if(colorMap.containsKey(ColorCode.RED.toString())){
153
								colorMap.put(ColorCode.RED.toString(),colorMap.get(ColorCode.RED.toString())+1);
154
							}else{
155
								colorMap.put(ColorCode.RED.toString(),1L);
156
							}
157
						}else if(order.getAlert()==OrderAlert.LATER_SHIPPING_IN_STOCK){
158
							if(colorMap.containsKey(ColorCode.PURPLE.toString())){
159
								colorMap.put(ColorCode.PURPLE.toString(),colorMap.get(ColorCode.PURPLE.toString())+1);
160
							}else{
161
								colorMap.put(ColorCode.PURPLE.toString(),1L);
162
							}
163
						}else{
164
							if(colorMap.containsKey(ColorCode.OTHER.toString())){
165
								colorMap.put(ColorCode.OTHER.toString(),colorMap.get(ColorCode.OTHER.toString())+1);
166
							}else{
167
								colorMap.put(ColorCode.OTHER.toString(),1L);
168
							}
169
						}
170
						transactionsColorMap.put(order.getTransactionId(), colorMap);
171
					}else{
172
						Map<String, Long> colorMap = new HashMap<String, Long>();
173
						if(order.getAlert()==OrderAlert.TODAY_SHIPPING_IN_STOCK){
174
							colorMap.put(ColorCode.GREEN.toString(),1L);
175
						}else if(order.getAlert()==OrderAlert.TODAY_SHIPPING_NOT_IN_STOCK){
176
							colorMap.put(ColorCode.RED.toString(),1L);
177
						}else if(order.getAlert()==OrderAlert.LATER_SHIPPING_IN_STOCK){
178
							colorMap.put(ColorCode.PURPLE.toString(),1L);
179
						}else{
180
							colorMap.put(ColorCode.OTHER.toString(),1L);
181
						}
182
						transactionsColorMap.put(order.getTransactionId(), colorMap);
183
					}
184
 
19004 manish.sha 185
				}
19196 manish.sha 186
 
187
				Map<Long, List<Long>> orderCategoryMap = new HashMap<Long, List<Long>>();
188
 
189
				for(Entry<Long, Map<String, Long>> colorMapEntry : transactionsColorMap.entrySet()){
190
					Map<String, Long> colorMap = colorMapEntry.getValue();
191
					List<String> colorSet = new ArrayList<String>(colorMap.keySet());
192
					long colorMapSize = colorSet.size();
193
					if(colorMapSize==1){
194
						if(ColorCode.GREEN.toString().equalsIgnoreCase(colorSet.get(0))){
195
							if(orderCategoryMap.containsKey(ALL_GREEN)){
196
								List<Long> transactions = orderCategoryMap.get(ALL_GREEN);
197
								transactions.add(colorMapEntry.getKey());
198
								orderCategoryMap.put(ALL_GREEN, transactions);
199
							}else{
200
								List<Long> transactions = new ArrayList<Long>();
201
								transactions.add(colorMapEntry.getKey());
202
								orderCategoryMap.put(ALL_GREEN, transactions);
203
							}
204
						}else if(ColorCode.RED.toString().equalsIgnoreCase(colorSet.get(0))){
205
							if(orderCategoryMap.containsKey(ALL_RED)){
206
								List<Long> transactions = orderCategoryMap.get(ALL_RED);
207
								transactions.add(colorMapEntry.getKey());
208
								orderCategoryMap.put(ALL_RED, transactions);
209
							}else{
210
								List<Long> transactions = new ArrayList<Long>();
211
								transactions.add(colorMapEntry.getKey());
212
								orderCategoryMap.put(ALL_RED, transactions);
213
							}
214
						}else if(ColorCode.PURPLE.toString().equalsIgnoreCase(colorSet.get(0))){
215
							if(orderCategoryMap.containsKey(ALL_PURPLE)){
216
								List<Long> transactions = orderCategoryMap.get(ALL_PURPLE);
217
								transactions.add(colorMapEntry.getKey());
218
								orderCategoryMap.put(ALL_PURPLE, transactions);
219
							}else{
220
								List<Long> transactions = new ArrayList<Long>();
221
								transactions.add(colorMapEntry.getKey());
222
								orderCategoryMap.put(ALL_PURPLE, transactions);
223
							}
224
						}else{
225
							if(orderCategoryMap.containsKey(ALL_OTHERS)){
226
								List<Long> transactions = orderCategoryMap.get(ALL_OTHERS);
227
								transactions.add(colorMapEntry.getKey());
228
								orderCategoryMap.put(ALL_OTHERS, transactions);
229
							}else{
230
								List<Long> transactions = new ArrayList<Long>();
231
								transactions.add(colorMapEntry.getKey());
232
								orderCategoryMap.put(ALL_OTHERS, transactions);
233
							}
234
						}
235
					}else if(colorMapSize>1){
236
						if(colorSet.contains(ColorCode.GREEN.toString())){
237
							if(colorSet.contains(ColorCode.PURPLE.toString())){
238
								if(orderCategoryMap.containsKey(GREEN_AND_PURPULE)){
239
									List<Long> transactions = orderCategoryMap.get(GREEN_AND_PURPULE);
240
									transactions.add(colorMapEntry.getKey());
241
									orderCategoryMap.put(GREEN_AND_PURPULE, transactions);
242
								}else{
243
									List<Long> transactions = new ArrayList<Long>();
244
									transactions.add(colorMapEntry.getKey());
245
									orderCategoryMap.put(GREEN_AND_PURPULE, transactions);
246
								}
247
							}else{
248
								if(orderCategoryMap.containsKey(GREEN_AND_IN_RED_OR_WHITE)){
249
									List<Long> transactions = orderCategoryMap.get(GREEN_AND_IN_RED_OR_WHITE);
250
									transactions.add(colorMapEntry.getKey());
251
									orderCategoryMap.put(GREEN_AND_IN_RED_OR_WHITE, transactions);
252
								}else{
253
									List<Long> transactions = new ArrayList<Long>();
254
									transactions.add(colorMapEntry.getKey());
255
									orderCategoryMap.put(GREEN_AND_IN_RED_OR_WHITE, transactions);
256
								}
257
							}
258
						}else if(colorSet.contains(ColorCode.PURPLE.toString())){
259
							if(orderCategoryMap.containsKey(PURPLE_AND_IN_RED_OR_WHITE)){
260
								List<Long> transactions = orderCategoryMap.get(PURPLE_AND_IN_RED_OR_WHITE);
261
								transactions.add(colorMapEntry.getKey());
262
								orderCategoryMap.put(PURPLE_AND_IN_RED_OR_WHITE, transactions);
263
							}else{
264
								List<Long> transactions = new ArrayList<Long>();
265
								transactions.add(colorMapEntry.getKey());
266
								orderCategoryMap.put(PURPLE_AND_IN_RED_OR_WHITE, transactions);
267
							}
268
						}else{
269
							if(orderCategoryMap.containsKey(ALL_OTHERS)){
270
								List<Long> transactions = orderCategoryMap.get(ALL_OTHERS);
271
								transactions.add(colorMapEntry.getKey());
272
								orderCategoryMap.put(ALL_OTHERS, transactions);
273
							}else{
274
								List<Long> transactions = new ArrayList<Long>();
275
								transactions.add(colorMapEntry.getKey());
276
								orderCategoryMap.put(ALL_OTHERS, transactions);
277
							}
278
						}
279
					}
19004 manish.sha 280
				}
19110 manish.sha 281
 
19196 manish.sha 282
				List<Long> categoryList = new ArrayList<Long>(orderCategoryMap.keySet());
283
				Collections.sort(categoryList);
19110 manish.sha 284
 
19196 manish.sha 285
				orders = new ArrayList<Order>();
19260 manish.sha 286
				if(orderCategory==OrderCategory.NONE){
287
					for(Long category:categoryList){
288
						List<Long> transactions = orderCategoryMap.get(category);
289
						for(Long transactionId: transactions){
290
							List<Order> txnOrders = transactionOrdersMap.get(transactionId);
291
							for(Order order: txnOrders){
292
								order.setCategory(categoryStrMap.get(category));
293
							}
294
							Collections.sort(txnOrders,new OrderPromisedShippingComparator());
295
							orders.addAll(txnOrders);
296
						}
19196 manish.sha 297
					}
19260 manish.sha 298
				}else{
299
					for(Long category:categoryList){
300
						if(orderCategory==categoryStrMap.get(category)){
301
							List<Long> transactions = orderCategoryMap.get(category);
302
							for(Long transactionId: transactions){
303
								List<Order> txnOrders = transactionOrdersMap.get(transactionId);
304
								for(Order order: txnOrders){
305
									order.setCategory(categoryStrMap.get(category));
306
								}
307
								Collections.sort(txnOrders,new OrderPromisedShippingComparator());
308
								orders.addAll(txnOrders);
309
							}
310
						}else{
311
							continue;
312
						}
313
					}
19263 manish.sha 314
					categoryOrderCount = 0;
19260 manish.sha 315
					categoryOrderCount = categoryOrderCount+orders.size();
19004 manish.sha 316
				}
19260 manish.sha 317
 
19004 manish.sha 318
			}
319
 
493 rajveer 320
		}catch(Exception e){
2449 chandransh 321
			e.printStackTrace();
493 rajveer 322
		}
323
		return orders;
324
	}
325
 
2449 chandransh 326
	/**
4133 chandransh 327
	 * Wrapper around the method of same name in the transaction service. This
328
	 * method uses a mapping of <i>type</i> to <i>status</i> to get the count of
329
	 * all orders with a given status.
330
	 * 
331
	 * @param type
332
	 *            The type of orders to return.
333
	 * @param warehouseId
334
	 *            The warehouse for which the orders should be queried.
335
	 * @return The count of orders of the given type assigned to the given
336
	 *         warehouse.
337
	 */
19260 manish.sha 338
	public static int getOrderCount(OrderType type, long warehouseId, long source, OrderCategory orderCategory){
4133 chandransh 339
		List<OrderStatus> statuses = getStatuses(type);
340
 
341
		int count = 0;
342
		try{
19260 manish.sha 343
			if(type==OrderType.ALL_PENDING && orderCategory!=OrderCategory.NONE){
19263 manish.sha 344
				int orderCount = categoryOrderCount;
345
				categoryOrderCount = 0;
346
				return orderCount;
19260 manish.sha 347
			}
348
			else{
349
				TransactionClient txnClient = new TransactionClient();
350
				Client client = txnClient.getClient();
351
				count += client.getOrderCount(statuses, warehouseId, source);
352
			}
4133 chandransh 353
		}catch(Exception e){
354
			e.printStackTrace();
355
		}
356
		return count;
357
	}
358
 
359
	/**
2449 chandransh 360
	 * Calls the same method of the transaction service and returns the status
361
	 * returned. Catches all exceptions that are raised and returns false in
362
	 * that case.
363
	 * 
364
	 * @param warehouseId
365
	 *            The warehouse for which the orders should be marked as
366
	 *            manifested.
367
	 * @param providerId
368
	 *            The provider for which the orders should be marked as
369
	 *            manifested.
3065 chandransh 370
	 * @param cod
371
	 *             Whether cod orders have to be marked as manifested
2449 chandransh 372
	 * @return True if everything goes fine, false otherwise.
373
	 */
5769 rajveer 374
	public static Map<Long, Long> getBilledOrders(long warehouseId, String providerId, boolean cod){
375
		Map<Long, Long> orders = new HashMap<Long, Long>();
760 chandransh 376
		try {
377
			long provider_id = Long.parseLong(providerId);
3132 rajveer 378
			TransactionClient client = new TransactionClient();
760 chandransh 379
			Client c = client.getClient();
4790 rajveer 380
 
381
			List<OrderStatus> statuses = new ArrayList<OrderStatus>();
382
			statuses.add(OrderStatus.BILLED);
8303 amar.kumar 383
			List<in.shop2020.model.v1.order.Order> torders = c.getOrdersInBatch(statuses, 0, 0, warehouseId, 0);
4790 rajveer 384
			for(in.shop2020.model.v1.order.Order torder: torders){
5556 rajveer 385
				if(torder.getLogistics_provider_id() == provider_id && torder.isLogisticsCod() == cod){
5769 rajveer 386
					orders.put(torder.getId(), torder.getPickupStoreId());
4790 rajveer 387
				}
4411 rajveer 388
			}
389
 
760 chandransh 390
		}catch(Exception e){
391
			e.printStackTrace();
392
		}
4790 rajveer 393
		return orders;
760 chandransh 394
	}
2449 chandransh 395
 
4790 rajveer 396
	public static boolean generateCourierDetailsFile(List<Long> orderIds, long providerId, long warehouseId, boolean isCod){
4411 rajveer 397
		Calendar date = new GregorianCalendar();
398
		int year = date.get(Calendar.YEAR);
399
		int month = date.get(Calendar.MONTH) +1;
400
		int day = date.get(Calendar.DAY_OF_MONTH);
401
 
402
		String fileNameSuffix = "-" + warehouseId + "-"+ providerId + "-" + year + "-" + month + "-" + day;
403
		if(isCod){
404
		    fileNameSuffix = "cod" + fileNameSuffix ;
405
		}
406
		else{
407
		    fileNameSuffix = "prepaid" + fileNameSuffix;
408
		}
409
 
410
		try {
4790 rajveer 411
			String fileName = courierDetailsPath + "/courier-details-" + fileNameSuffix + "-temp.xls";
4415 rajveer 412
			FileOutputStream f = new FileOutputStream(fileName);
4411 rajveer 413
			CourierDetailsGenerator courierDetailsGenerator = new CourierDetailsGenerator();
4790 rajveer 414
			ByteArrayOutputStream baosXLS = courierDetailsGenerator.generateCourierDetails(orderIds, warehouseId, providerId, isCod);
4411 rajveer 415
			baosXLS.writeTo(f);
416
			f.close();
417
		} catch (FileNotFoundException e) {
418
			logger.error("Unable to create the courier details file", e);
419
		} catch (IOException e) {
420
			logger.error("Unable to create the courier details file", e);
421
		}
422
 
423
		CourierDetailsReportMerger merger = new CourierDetailsReportMerger();
424
		try {
425
			Map<Long, String> warehouseIdFileNames = new HashMap<Long, String>();
4790 rajveer 426
			String fName;
427
			fName = courierDetailsPath + "/courier-details-" + fileNameSuffix + "-temp.xls";
428
			if((new File(fName)).exists()){
429
				warehouseIdFileNames.put(0L, fName);
4411 rajveer 430
			}
4790 rajveer 431
			fName = courierDetailsPath + "/courier-details-" + fileNameSuffix + ".xls";
432
			if((new File(fName)).exists()){
433
				warehouseIdFileNames.put(1L, fName);
4411 rajveer 434
			}
4790 rajveer 435
			ByteArrayOutputStream binXLS = merger.mergeCourierDetailsReports(warehouseIdFileNames);
436
			FileOutputStream f = new FileOutputStream(courierDetailsPath + "/courier-details-" + fileNameSuffix + ".xls");
4411 rajveer 437
			binXLS.writeTo(f);
438
			f.close();
4790 rajveer 439
			File tempFile = new File(courierDetailsPath + "/courier-details-" + fileNameSuffix + "-temp.xls");
440
			if(tempFile.exists()){
441
				tempFile.delete();
442
			}
4411 rajveer 443
		} catch (FileNotFoundException e) {
444
			logger.error("Error while creating the Courier Details report", e);
445
		} catch (IOException e) {
446
			logger.error("IO error while writing the Courier Details report", e);
447
		}
448
		return true;
449
	}
450
 
19224 manish.sha 451
 
452
	public static List<Order> getOrdersFromThirftOrders(List<in.shop2020.model.v1.order.Order> orders){
453
		List<Order> ordersToReturn = new ArrayList<Order>();
19226 manish.sha 454
		Map<Long, Warehouse> warehousesMap = CatalogUtils.getAllWarehousesForBillingWarehouse(0); 
19224 manish.sha 455
		List<Long> itemIds = new ArrayList<Long>();
456
		Map<Long, List<in.shop2020.model.v1.order.Order>> txnOrdersMap = new HashMap<Long, List<in.shop2020.model.v1.order.Order>>();
457
		SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy");
458
		SimpleDateFormat newSdf = new SimpleDateFormat("yyyy-MM-dd");
459
		NumberFormat formatter = new DecimalFormat("#0.000");
460
		NumberFormat rformatter = new DecimalFormat("#0.00");
461
		Date date = new Date(System.currentTimeMillis());
462
		for(in.shop2020.model.v1.order.Order t_order : orders){
463
			if(!itemIds.contains(t_order.getLineitems().get(0).getItem_id())){
464
				itemIds.add(t_order.getLineitems().get(0).getItem_id());
465
			}
466
			List<in.shop2020.model.v1.order.Order> txnOrders = null;
467
			if(txnOrdersMap.containsKey(t_order.getTransactionId())){
468
				txnOrders = txnOrdersMap.get(t_order.getTransactionId());				
469
			}else{
470
				txnOrders = new ArrayList<in.shop2020.model.v1.order.Order>();
471
			}
472
			txnOrders.add(t_order);
473
			txnOrdersMap.put(t_order.getTransactionId(), txnOrders);
474
		}
475
		try {
476
			in.shop2020.model.v1.catalog.CatalogService.Client client = new CatalogClient().getClient();
477
			Map<Long, Item> itemsMap = client.getItems(itemIds);
478
			in.shop2020.logistics.LogisticsService.Client logisticsClient = new LogisticsClient().getClient();
479
			List<in.shop2020.logistics.Provider> providers = logisticsClient.getAllProviders();
480
			Map<Long,in.shop2020.logistics.Provider> providersMap = new HashMap<Long, in.shop2020.logistics.Provider>();
481
 
482
			for(in.shop2020.logistics.Provider provider : providers){
483
				providersMap.put(provider.getId(), provider);
484
			}
485
 
486
			in.shop2020.model.v1.order.TransactionService.Client tClient = new TransactionClient().getClient();
19227 manish.sha 487
			InventoryClient inventoryServiceClient = new InventoryClient();
488
			InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
19224 manish.sha 489
			for(in.shop2020.model.v1.order.Order t_order : orders){
490
				LineItem lineItem = t_order.getLineitems().get(0);
491
				String pickFromWarehouse = warehousesMap.get(t_order.getFulfilmentWarehouseId()).getDisplayName();
492
				Item item = itemsMap.get(lineItem.getItem_id());
493
				in.shop2020.logistics.Provider provider = providersMap.get(t_order.getLogistics_provider_id());
494
				Warehouse fulfillmentWarehouse = warehousesMap.get(t_order.getFulfilmentWarehouseId());
495
				Map<Long, Map<String, String>> acceptTogetherOrdersMap = null;
496
				Map<Long, Map<String, String>> billTogetherOrdersMap = null;
497
				if(!t_order.isSetAccepted_timestamp()){
498
					acceptTogetherOrdersMap = new HashMap<Long, Map<String, String>>();
499
					Map<String, String> orderValuesMap = new HashMap<String, String>();
500
					orderValuesMap.put("ProductName", getItemDisplayName(lineItem));
501
					orderValuesMap.put("Quantity", lineItem.getQuantity()+"");
502
					orderValuesMap.put("Promised_Shipping", sdf.format(new Date(t_order.getPromised_shipping_time())));     
503
					orderValuesMap.put("Weight", formatter.format(lineItem.getUnit_weight()));   
504
					orderValuesMap.put("UnitPrice", rformatter.format(lineItem.getUnit_price()));
505
					orderValuesMap.put("PackQuantity", item.getPackQuantity()+"");
506
					orderValuesMap.put("WarehouseType", fulfillmentWarehouse.getWarehouseType().toString());
507
					acceptTogetherOrdersMap.put(t_order.getId(), orderValuesMap);
508
					List<in.shop2020.model.v1.order.Order> taOrders = null;
509
					if(txnOrdersMap.containsKey(t_order.getTransactionId())){
510
						taOrders = txnOrdersMap.get(t_order.getTransactionId());
511
					}else{
512
						try{
513
							taOrders = tClient.getOrdersForTransaction(t_order.getTransactionId(), t_order.getCustomer_id());
514
						}catch(Exception te){
515
							tClient = new TransactionClient().getClient();
516
							taOrders = tClient.getOrdersForTransaction(t_order.getTransactionId(), t_order.getCustomer_id());
517
						}
518
					}
519
					for(in.shop2020.model.v1.order.Order taOrder : taOrders){
520
						LineItem lineItem1 = taOrder.getLineitems().get(0);
521
						if(t_order.getId()==taOrder.getId()){
522
							continue;
523
						}
524
						else if(taOrder.getSource()!=OrderSource.WEBSITE.getValue()){
525
							continue;
526
						}else{
527
							orderValuesMap = new HashMap<String, String>();
528
							if(provider.isGroupShipmentAllowed() && !taOrder.isSetAccepted_timestamp() && t_order.getStatus()==taOrder.getStatus() 
529
									&& taOrder.getLogistics_provider_id()==t_order.getLogistics_provider_id() 
530
									&& taOrder.isLogisticsCod()==t_order.isLogisticsCod() && taOrder.getWarehouse_id() == t_order.getWarehouse_id() 
531
									&& taOrder.getOrderType() == t_order.getOrderType() && taOrder.getPickupStoreId() == t_order.getPickupStoreId()){
532
								orderValuesMap.put("ProductName", getItemDisplayName(lineItem1));
533
								orderValuesMap.put("Quantity", lineItem1.getQuantity()+"");
19227 manish.sha 534
								if(warehousesMap.containsKey(taOrder.getFulfilmentWarehouseId())){
535
									fulfillmentWarehouse = warehousesMap.get(taOrder.getFulfilmentWarehouseId());
536
								}else{
537
									try{
538
										fulfillmentWarehouse = inventoryClient.getWarehouse(taOrder.getFulfilmentWarehouseId());
539
										warehousesMap.put(fulfillmentWarehouse.getId(), fulfillmentWarehouse);
540
									}
541
									catch(Exception ie){
542
										ie.printStackTrace();
543
										inventoryClient = inventoryServiceClient.getClient();
544
										fulfillmentWarehouse = inventoryClient.getWarehouse(taOrder.getFulfilmentWarehouseId());
545
										warehousesMap.put(fulfillmentWarehouse.getId(), fulfillmentWarehouse);
546
									}
547
								}
19224 manish.sha 548
								orderValuesMap.put("WarehouseType", fulfillmentWarehouse.getWarehouseType().toString());
549
								orderValuesMap.put("Promised_Shipping", sdf.format(new Date(taOrder.getPromised_shipping_time())));
550
								orderValuesMap.put("UnitPrice", rformatter.format(lineItem1.getUnit_price()));
551
								orderValuesMap.put("Weight", formatter.format(lineItem1.getUnit_weight()));
552
								if(itemsMap.containsKey(lineItem1.getItem_id())){
553
									Item orderItem = itemsMap.get(lineItem1.getItem_id());
554
									orderValuesMap.put("PackQuantity", orderItem.getPackQuantity()+"");
555
								}else{
556
									try{
557
										Item orderItem = client.getItem(lineItem1.getItem_id());
558
										orderValuesMap.put("PackQuantity", orderItem.getPackQuantity()+"");
559
										itemsMap.put(orderItem.getId(), orderItem);
560
									}catch(Exception ce){
561
										ce.printStackTrace();
562
										client = new CatalogClient().getClient();
563
										Item orderItem = client.getItem(lineItem1.getItem_id());
564
										orderValuesMap.put("PackQuantity", orderItem.getPackQuantity()+"");
565
										itemsMap.put(orderItem.getId(), orderItem);
566
									}
567
								}
568
							}
569
							if(orderValuesMap!=null && orderValuesMap.size()>0){
570
	            				acceptTogetherOrdersMap.put(taOrder.getId(), orderValuesMap);
571
	            			}
572
						}
573
					}
574
				}
575
 
576
				if(t_order.isSetLogisticsTransactionId()){
577
					billTogetherOrdersMap = new HashMap<Long, Map<String, String>>();
578
	            	Map<String, String> orderValuesMap = new HashMap<String, String>();
579
		            if(t_order.getStatus()==OrderStatus.ACCEPTED || t_order.getStatus()==OrderStatus.RTO_IN_TRANSIT ){
580
		            	orderValuesMap.put("ProductName", getItemDisplayName(lineItem));
581
		            	orderValuesMap.put("Quantity", lineItem.getQuantity()+"");
582
		            	if(ItemType.SERIALIZED==item.getType()){
583
		            		orderValuesMap.put("IsSerialized", "true");
584
		            	}else{
585
		            		orderValuesMap.put("IsSerialized", "false");
586
		            	}
587
		            	if(t_order.isSetFreebieItemId() && t_order.getFreebieItemId()!=0){
588
		            		orderValuesMap.put("IsFreebie", "true");
589
		            	} else {
590
		            		orderValuesMap.put("IsFreebie", "false");
591
		            	}
592
		            	billTogetherOrdersMap.put(t_order.getId(), orderValuesMap);
593
	            	}
594
 
595
		            List<in.shop2020.model.v1.order.Order> taOrders = null;
596
		            try{
597
		            	taOrders = tClient.getGroupOrdersByLogisticsTxnId(t_order.getLogisticsTransactionId());
598
		            }catch(Exception te){
599
		            	tClient = new TransactionClient().getClient();
600
		            	taOrders = tClient.getGroupOrdersByLogisticsTxnId(t_order.getLogisticsTransactionId());
601
		            }
602
 
603
		            for(in.shop2020.model.v1.order.Order taOrder: taOrders){
604
	            		if(taOrder.getStatus()==OrderStatus.ACCEPTED || taOrder.getStatus()==OrderStatus.RTO_IN_TRANSIT ){
605
		            		if(taOrder.getId()==t_order.getId()){
606
		            			continue;
607
		            		} else {
608
		            			orderValuesMap = new HashMap<String, String>();
609
		            			Item orderItem = null;
610
		            			if(itemsMap.containsKey(taOrder.getLineitems().get(0).getItem_id())){
611
		            				orderItem = itemsMap.get(taOrder.getId());
612
		            			}else{
613
									try{
614
										orderItem = client.getItem(taOrder.getLineitems().get(0).getItem_id());
615
										itemsMap.put(orderItem.getId(), orderItem);
616
									}catch(Exception ce){
617
										ce.printStackTrace();
618
										client = new CatalogClient().getClient();
619
										orderItem = client.getItem(taOrder.getLineitems().get(0).getItem_id());
620
										itemsMap.put(orderItem.getId(), orderItem);
621
									}
622
								}
623
 
624
		            			orderValuesMap.put("ProductName", getProductName(orderItem));
625
		                    	orderValuesMap.put("Quantity", taOrder.getLineitems().get(0).getQuantity()+"");
626
		                    	if(ItemType.SERIALIZED==orderItem.getType()){
627
		                    		orderValuesMap.put("IsSerialized", "true");
628
		                    	}else{
629
		                    		orderValuesMap.put("IsSerialized", "false");
630
		                    	}
631
		                    	if(taOrder.isSetFreebieItemId() && taOrder.getFreebieItemId()!=0){
632
		                    		orderValuesMap.put("IsFreebie", "true");
633
		                    	} else {
634
		                    		orderValuesMap.put("IsFreebie", "false");
635
		                    	}
636
		                    	billTogetherOrdersMap.put(taOrder.getId(), orderValuesMap);
637
		            		}
638
	            		}
639
	            	}
640
 
641
				}else{
642
	            	billTogetherOrdersMap = new HashMap<Long, Map<String, String>>();
643
	            	Map<String, String> orderValuesMap = new HashMap<String, String>();
644
	            	orderValuesMap.put("ProductName", getItemDisplayName(lineItem));
645
	            	orderValuesMap.put("Quantity", lineItem.getQuantity()+"");
646
	            	if(ItemType.SERIALIZED==item.getType()){
647
	            		orderValuesMap.put("IsSerialized", "true");
648
	            	}else{
649
	            		orderValuesMap.put("IsSerialized", "false");
650
	            	}
651
	            	if(t_order.isSetFreebieItemId() && t_order.getFreebieItemId()!=0){
652
	            		orderValuesMap.put("IsFreebie", "true");
653
	            	} else {
654
	            		orderValuesMap.put("IsFreebie", "false");
655
	            	}
656
	            	billTogetherOrdersMap.put(t_order.getId(), orderValuesMap);
657
	            }
658
				String delayReason = null;
659
				if(t_order.getDelayReason() != null)
660
				    delayReason = t_order.getDelayReason().name();
661
 
662
				String osource = OrderSource.findByValue((int)t_order.getSource()).toString();
663
 
664
				Order order = new Order(t_order.getId(),
665
						t_order.getCustomer_id(),
666
						t_order.getCustomer_name(),
667
						t_order.getCustomer_mobilenumber(),
668
						t_order.getCustomer_pincode(),
669
						t_order.getCustomer_address1(),
670
						t_order.getCustomer_address2(),
671
						t_order.getCustomer_city(),
672
						t_order.getCustomer_state(),
673
						t_order.getCustomer_email(),
674
						t_order.getCreated_timestamp(),
675
						t_order.getShipping_timestamp(),
676
						t_order.getVerification_timestamp(),
677
						t_order.getExpected_delivery_time(),
678
						t_order.getPromised_delivery_time(),
679
						t_order.getExpected_shipping_time(),
680
						t_order.getPromised_shipping_time(),
681
						t_order.getStatus().getValue(),
682
						t_order.getStatusDescription(),
683
						t_order.getOrderType().name(),
684
						lineItem.getItem_id(),
685
						lineItem.getProductGroup(),
686
						lineItem.getBrand(),
687
						lineItem.getModel_name(),
688
						lineItem.getModel_number(),
689
						lineItem.getColor(),
690
						lineItem.getExtra_info(),
691
						lineItem.getDealText(),
692
						lineItem.getQuantity(),
693
						t_order.getTotal_amount(),
694
						t_order.getTotal_weight(),
695
						t_order.getAirwaybill_no(),
696
						t_order.getBilled_by(),
697
						t_order.getInvoice_number(),
698
						t_order.getJacket_number(),
699
						lineItem.getItem_number(),
700
						lineItem.getSerial_number(),
701
						t_order.getBatchNo(),
702
						t_order.getSerialNo(),
703
						t_order.isDoaFlag(),
704
						t_order.getPickupRequestNo(),
705
						t_order.isLogisticsCod(),
706
						delayReason,
707
						pickFromWarehouse,
708
						ItemType.SERIALIZED.equals(item.getType()),
709
						item.isHasItemNo(),
710
						t_order.getFulfilmentWarehouseId(),
711
						t_order.getWarehouse_id(),
712
						t_order.getPickupStoreId(),
713
						t_order.getFreebieItemId(),
714
						osource, 
715
						new Long(t_order.getProductCondition().getValue()),
716
						t_order.getTransactionId());
717
				if(acceptTogetherOrdersMap!=null && acceptTogetherOrdersMap.size()>0){
718
					order.setAcceptTogetherOrdersMap(acceptTogetherOrdersMap);
719
				}
720
				if(billTogetherOrdersMap!=null && billTogetherOrdersMap.size()>0){
721
					order.setBillTogetherOrdersMap(billTogetherOrdersMap);
722
				}
723
				if(t_order.isSetLogisticsTransactionId()){
724
					order.setLogisticsTransactionId(t_order.getLogisticsTransactionId());
725
				}
726
 
727
 
728
				long currentDateTime = 0;
729
				long promisedShippingTime =0 ;
730
				long currentTime = date.getTime();
731
				try{
732
					currentDateTime = newSdf.parse(newSdf.format(date)).getTime();
733
					promisedShippingTime = newSdf.parse(newSdf.format(new Date(order.getPromisedShippingTime()))).getTime();
734
				}catch(Exception e){
735
					e.printStackTrace();
736
				}
737
				if(promisedShippingTime >0 && (order.getStatus()==3 || order.getStatus()==5 || order.getStatus()==41 ||
738
						order.getStatus()==35 || order.getStatus()==36 || order.getStatus()==37)){
739
					if(promisedShippingTime <= currentDateTime){
740
						if(loadVirtualWarehouseDetails().contains(order.getFulfilmentWarehouseId())){
741
							order.setAlert(OrderAlert.TODAY_SHIPPING_NOT_IN_STOCK);
742
						}else{
743
							order.setAlert(OrderAlert.TODAY_SHIPPING_IN_STOCK);
744
						}
745
					}else{
746
						if(!loadVirtualWarehouseDetails().contains(order.getFulfilmentWarehouseId())){
747
							order.setAlert(OrderAlert.LATER_SHIPPING_IN_STOCK);
748
						}
749
					}
750
				}
751
 
752
				ordersToReturn.add(order);
753
			}
754
		}
755
		catch (Exception e) {
756
			e.printStackTrace();
757
		}
758
 
759
		return ordersToReturn;
760
 
761
	}
762
 
763
 
671 chandransh 764
	/**
2449 chandransh 765
	 * 
671 chandransh 766
	 * @param t_order
2449 chandransh 767
	 *            A thrift order object with line items.
768
	 * @return an Order bean which can be used for rendering on the client side.
671 chandransh 769
	 */
770
	public static Order getOrderFromThriftOrder(in.shop2020.model.v1.order.Order t_order) {
914 chandransh 771
		LineItem lineItem = t_order.getLineitems().get(0);
5110 mandeep.dh 772
		String pickFromWarehouse = null;
773
		Item item = null;
19004 manish.sha 774
		String warehouseType = "";
13146 manish.sha 775
 
776
	    Map<Long, Map<String, String>> acceptTogetherOrdersMap = null;
777
	    Map<Long, Map<String, String>> billTogetherOrdersMap = null;
5110 mandeep.dh 778
 
779
        try {
5945 mandeep.dh 780
            in.shop2020.model.v1.catalog.CatalogService.Client client = new CatalogClient().getClient();
5948 mandeep.dh 781
            in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = new InventoryClient().getClient();
5110 mandeep.dh 782
            item = client.getItem(lineItem.getItem_id());
783
            pickFromWarehouse = CatalogUtils.getWarehousesForBillingWarehouse(t_order.getWarehouse_id())
784
                                    .get(t_order.getFulfilmentWarehouseId());
785
 
786
            if (pickFromWarehouse == null) {
5948 mandeep.dh 787
                Warehouse warehouse = inventoryClient.getWarehouse(t_order.getFulfilmentWarehouseId());
788
                pickFromWarehouse = inventoryClient.getWarehouses(null, InventoryType.GOOD, warehouse.getVendor().getId(), t_order.getWarehouse_id(), 0).get(0).getDisplayName();
13146 manish.sha 789
            }											
790
            if(!t_order.isSetAccepted_timestamp()){
791
            	acceptTogetherOrdersMap = new HashMap<Long, Map<String, String>>();
792
            	Map<String, String> orderValuesMap = new HashMap<String, String>();
793
            	orderValuesMap.put("ProductName", getItemDisplayName(lineItem));
794
				orderValuesMap.put("Quantity", lineItem.getQuantity()+"");
18100 manish.sha 795
				if(!inventoryClient.isAlive()){
796
					inventoryClient = new InventoryClient().getClient();
797
				}
798
				Warehouse fulfillmentWarehouse = inventoryClient.getWarehouse(t_order.getFulfilmentWarehouseId());
19004 manish.sha 799
				warehouseType = fulfillmentWarehouse.getWarehouseType().toString();
18100 manish.sha 800
				orderValuesMap.put("WarehouseType", fulfillmentWarehouse.getWarehouseType().toString());
19054 manish.sha 801
				SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy");
18938 manish.sha 802
				orderValuesMap.put("Promised_Shipping", sdf.format(new Date(t_order.getPromised_shipping_time())));
18964 manish.sha 803
				NumberFormat formatter = new DecimalFormat("#0.000");     
804
				orderValuesMap.put("Weight", formatter.format(t_order.getLineitems().get(0).getUnit_weight()));
805
				formatter = new DecimalFormat("#0.00");   
18938 manish.sha 806
				orderValuesMap.put("UnitPrice", formatter.format(t_order.getLineitems().get(0).getUnit_price()));
18964 manish.sha 807
				orderValuesMap.put("PackQuantity", item.getPackQuantity()+"");
13146 manish.sha 808
				acceptTogetherOrdersMap.put(t_order.getId(), orderValuesMap);
809
            	List<in.shop2020.model.v1.order.Order> taOrders = new TransactionClient().getClient().getOrdersForTransaction(t_order.getTransactionId(), t_order.getCustomer_id());
810
            	in.shop2020.logistics.Provider provider = new LogisticsClient().getClient().getProvider(t_order.getLogistics_provider_id());
811
            	for(in.shop2020.model.v1.order.Order taOrder : taOrders){
812
            		LineItem lineItem1 = taOrder.getLineitems().get(0);
813
            		if(t_order.getId()==taOrder.getId()){
814
            			continue;
13156 manish.sha 815
            		}
816
            		else if(taOrder.getSource()!=OrderSource.WEBSITE.getValue()){
817
            			continue;
818
            		}
819
            		else{
13146 manish.sha 820
            			orderValuesMap = new HashMap<String, String>();
13323 manish.sha 821
            			if(provider.isGroupShipmentAllowed() && !taOrder.isSetAccepted_timestamp() && t_order.getStatus()==taOrder.getStatus() 
822
            					&& taOrder.getLogistics_provider_id()==t_order.getLogistics_provider_id() 
823
            					&& taOrder.isLogisticsCod()==t_order.isLogisticsCod() && taOrder.getWarehouse_id() == t_order.getWarehouse_id() 
824
            					&& taOrder.getOrderType() == t_order.getOrderType() && taOrder.getPickupStoreId() == t_order.getPickupStoreId()){
13146 manish.sha 825
            				orderValuesMap.put("ProductName", getItemDisplayName(lineItem1));
826
            				orderValuesMap.put("Quantity", lineItem1.getQuantity()+"");
18100 manish.sha 827
            				if(!inventoryClient.isAlive()){
828
            					inventoryClient = new InventoryClient().getClient();
829
            				}
830
            				fulfillmentWarehouse = inventoryClient.getWarehouse(taOrder.getFulfilmentWarehouseId());
831
            				orderValuesMap.put("WarehouseType", fulfillmentWarehouse.getWarehouseType().toString());
18938 manish.sha 832
            				orderValuesMap.put("Promised_Shipping", sdf.format(new Date(taOrder.getPromised_shipping_time())));
833
            				orderValuesMap.put("UnitPrice", formatter.format(taOrder.getLineitems().get(0).getUnit_price()));
18964 manish.sha 834
            				formatter = new DecimalFormat("#0.000");   
835
            				orderValuesMap.put("Weight", formatter.format(taOrder.getLineitems().get(0).getUnit_weight()));
836
            				Item orderItem = client.getItem(taOrder.getLineitems().get(0).getItem_id());
837
            				orderValuesMap.put("PackQuantity", orderItem.getPackQuantity()+"");
13146 manish.sha 838
            			}
839
            			if(orderValuesMap!=null && orderValuesMap.size()>0){
840
            				acceptTogetherOrdersMap.put(taOrder.getId(), orderValuesMap);
841
            			}
842
            		}
843
            	}
5110 mandeep.dh 844
            }
13146 manish.sha 845
 
846
            if(t_order.isSetLogisticsTransactionId()){
847
            	billTogetherOrdersMap = new HashMap<Long, Map<String, String>>();
848
            	Map<String, String> orderValuesMap = new HashMap<String, String>();
19091 manish.sha 849
	            if(t_order.getStatus()==OrderStatus.ACCEPTED || t_order.getStatus()==OrderStatus.RTO_IN_TRANSIT ){
18100 manish.sha 850
	            	orderValuesMap.put("ProductName", getItemDisplayName(lineItem));
851
	            	orderValuesMap.put("Quantity", lineItem.getQuantity()+"");
852
	            	if(ItemType.SERIALIZED==item.getType()){
853
	            		orderValuesMap.put("IsSerialized", "true");
854
	            	}else{
855
	            		orderValuesMap.put("IsSerialized", "false");
856
	            	}
857
	            	if(t_order.isSetFreebieItemId() && t_order.getFreebieItemId()!=0){
858
	            		orderValuesMap.put("IsFreebie", "true");
859
	            	} else {
860
	            		orderValuesMap.put("IsFreebie", "false");
861
	            	}
862
	            	billTogetherOrdersMap.put(t_order.getId(), orderValuesMap);
13146 manish.sha 863
            	}
864
            	Map<Long, Item> orderItemMap = new HashMap<Long, Item>();
865
            	List<in.shop2020.model.v1.order.Order> taOrders = new TransactionClient().getClient().getGroupOrdersByLogisticsTxnId(t_order.getLogisticsTransactionId());
866
            	for(in.shop2020.model.v1.order.Order ord1: taOrders){
19091 manish.sha 867
            		if(ord1.getStatus()==OrderStatus.ACCEPTED || ord1.getStatus()==OrderStatus.RTO_IN_TRANSIT ){
18100 manish.sha 868
	            		if(ord1.getId()== t_order.getId()){
869
	            			orderItemMap.put(ord1.getId(), item);
870
	            		} else {
871
		            		if(!client.isAlive()){
872
		            			client = new CatalogClient().getClient();
873
		            		}
874
		            		Item it = client.getItem(ord1.getLineitems().get(0).getItem_id());
875
		            		orderItemMap.put(ord1.getId(), it);
13146 manish.sha 876
	            		}
877
            		}
878
            	}
879
 
880
            	for(in.shop2020.model.v1.order.Order taOrder: taOrders){
19091 manish.sha 881
            		if(taOrder.getStatus()==OrderStatus.ACCEPTED || taOrder.getStatus()==OrderStatus.RTO_IN_TRANSIT ){
18100 manish.sha 882
	            		if(taOrder.getId()==t_order.getId()){
883
	            			continue;
884
	            		} else {
885
	            			orderValuesMap = new HashMap<String, String>();
886
	            			Item orderItem = orderItemMap.get(taOrder.getId());
887
	            			orderValuesMap.put("ProductName", getProductName(orderItem));
888
	                    	orderValuesMap.put("Quantity", taOrder.getLineitems().get(0).getQuantity()+"");
889
	                    	if(ItemType.SERIALIZED==orderItem.getType()){
890
	                    		orderValuesMap.put("IsSerialized", "true");
891
	                    	}else{
892
	                    		orderValuesMap.put("IsSerialized", "false");
893
	                    	}
894
	                    	if(taOrder.isSetFreebieItemId() && taOrder.getFreebieItemId()!=0){
895
	                    		orderValuesMap.put("IsFreebie", "true");
896
	                    	} else {
897
	                    		orderValuesMap.put("IsFreebie", "false");
898
	                    	}
899
	                    	billTogetherOrdersMap.put(taOrder.getId(), orderValuesMap);
900
	            		}
13146 manish.sha 901
            		}
902
            	}
903
            }
904
            else{
905
            	billTogetherOrdersMap = new HashMap<Long, Map<String, String>>();
906
            	Map<String, String> orderValuesMap = new HashMap<String, String>();
907
            	orderValuesMap.put("ProductName", getItemDisplayName(lineItem));
908
            	orderValuesMap.put("Quantity", lineItem.getQuantity()+"");
909
            	if(ItemType.SERIALIZED==item.getType()){
910
            		orderValuesMap.put("IsSerialized", "true");
911
            	}else{
912
            		orderValuesMap.put("IsSerialized", "false");
913
            	}
914
            	if(t_order.isSetFreebieItemId() && t_order.getFreebieItemId()!=0){
915
            		orderValuesMap.put("IsFreebie", "true");
916
            	} else {
917
            		orderValuesMap.put("IsFreebie", "false");
918
            	}
919
            	billTogetherOrdersMap.put(t_order.getId(), orderValuesMap);
920
            }
5110 mandeep.dh 921
		}
922
        catch (Exception e) {
923
            logger.error("Error looking up warehouse: " + t_order.getVendorId(), e);
924
        }
925
 
3553 chandransh 926
		String delayReason = null;
927
		if(t_order.getDelayReason() != null)
7433 rajveer 928
		    delayReason = t_order.getDelayReason().name();
3553 chandransh 929
 
7556 rajveer 930
		String osource = OrderSource.findByValue((int)t_order.getSource()).toString();
7433 rajveer 931
 
966 chandransh 932
		Order order = new Order(t_order.getId(),
933
				t_order.getCustomer_id(),
934
				t_order.getCustomer_name(),
935
				t_order.getCustomer_mobilenumber(),
936
				t_order.getCustomer_pincode(),
937
				t_order.getCustomer_address1(),
938
				t_order.getCustomer_address2(),
939
				t_order.getCustomer_city(),
940
				t_order.getCustomer_state(),
941
				t_order.getCustomer_email(),
942
				t_order.getCreated_timestamp(),
4004 chandransh 943
				t_order.getShipping_timestamp(),
944
				t_order.getVerification_timestamp(),
966 chandransh 945
				t_order.getExpected_delivery_time(),
3994 chandransh 946
				t_order.getPromised_delivery_time(),
4004 chandransh 947
				t_order.getExpected_shipping_time(),
4666 rajveer 948
				t_order.getPromised_shipping_time(),
966 chandransh 949
				t_order.getStatus().getValue(),
950
				t_order.getStatusDescription(),
5527 anupam.sin 951
				t_order.getOrderType().name(),
966 chandransh 952
				lineItem.getItem_id(),
953
				lineItem.getProductGroup(),
954
				lineItem.getBrand(),
955
				lineItem.getModel_name(),
956
				lineItem.getModel_number(),
957
				lineItem.getColor(),
958
				lineItem.getExtra_info(),
4172 rajveer 959
				lineItem.getDealText(),
5387 rajveer 960
				lineItem.getQuantity(),
2782 chandransh 961
				t_order.getTotal_amount(),
962
				t_order.getTotal_weight(),
963
				t_order.getAirwaybill_no(),
964
				t_order.getBilled_by(),
965
				t_order.getInvoice_number(),
966
				t_order.getJacket_number(),
967
				lineItem.getItem_number(),
4659 mandeep.dh 968
				lineItem.getSerial_number(),
3065 chandransh 969
				t_order.getBatchNo(),
970
				t_order.getSerialNo(),
2509 chandransh 971
				t_order.isDoaFlag(),
3065 chandransh 972
				t_order.getPickupRequestNo(),
5556 rajveer 973
				t_order.isLogisticsCod(),
5110 mandeep.dh 974
				delayReason,
975
				pickFromWarehouse,
6028 rajveer 976
				ItemType.SERIALIZED.equals(item.getType()),
977
				item.isHasItemNo(),
5769 rajveer 978
				t_order.getFulfilmentWarehouseId(),
9263 amar.kumar 979
				t_order.getWarehouse_id(),
7190 amar.kumar 980
				t_order.getPickupStoreId(),
7422 rajveer 981
				t_order.getFreebieItemId(),
8717 amar.kumar 982
				osource, 
13146 manish.sha 983
				new Long(t_order.getProductCondition().getValue()),
984
				t_order.getTransactionId());
985
		if(acceptTogetherOrdersMap!=null && acceptTogetherOrdersMap.size()>0){
986
			order.setAcceptTogetherOrdersMap(acceptTogetherOrdersMap);
987
		}
988
		if(billTogetherOrdersMap!=null && billTogetherOrdersMap.size()>0){
989
			order.setBillTogetherOrdersMap(billTogetherOrdersMap);
990
		}
991
		if(t_order.isSetLogisticsTransactionId()){
992
			order.setLogisticsTransactionId(t_order.getLogisticsTransactionId());
993
		}
19054 manish.sha 994
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
19032 manish.sha 995
		Date date = new Date(System.currentTimeMillis());
996
		long currentDateTime = 0;
19196 manish.sha 997
		long promisedShippingTime =0 ;
19032 manish.sha 998
		long currentTime = date.getTime();
19054 manish.sha 999
		try{
1000
			currentDateTime = sdf.parse(sdf.format(date)).getTime();
19196 manish.sha 1001
			promisedShippingTime = sdf.parse(sdf.format(new Date(order.getPromisedShippingTime()))).getTime();
19054 manish.sha 1002
		}catch(Exception e){
1003
			e.printStackTrace();
1004
		}
19196 manish.sha 1005
		if(promisedShippingTime >0 && (order.getStatus()==3 || order.getStatus()==5 || order.getStatus()==41 ||
19058 manish.sha 1006
				order.getStatus()==35 || order.getStatus()==36 || order.getStatus()==37)){
19196 manish.sha 1007
			if(promisedShippingTime <= currentDateTime){
19050 manish.sha 1008
				if(loadVirtualWarehouseDetails().contains(order.getFulfilmentWarehouseId())){
19032 manish.sha 1009
					order.setAlert(OrderAlert.TODAY_SHIPPING_NOT_IN_STOCK);
1010
				}else{
1011
					order.setAlert(OrderAlert.TODAY_SHIPPING_IN_STOCK);
1012
				}
1013
			}else{
19162 manish.sha 1014
				if(!loadVirtualWarehouseDetails().contains(order.getFulfilmentWarehouseId())){
19164 manish.sha 1015
					order.setAlert(OrderAlert.LATER_SHIPPING_IN_STOCK);
19032 manish.sha 1016
				}
1017
			}
1018
		}
966 chandransh 1019
		return order;
671 chandransh 1020
	}
1021
 
2449 chandransh 1022
	/**
2697 chandransh 1023
	 * Queries the transction server to get the list of all return orders that
1024
	 * have to be processed.
1025
	 * 
1026
	 * @return A list of all return orders to be processed.
1027
	 */
1028
	public static List<ReturnOrder> getReturnOrders(long warehouseId){
1029
		List<ReturnOrder> retOrders = new ArrayList<ReturnOrder>();
1030
		try{
3132 rajveer 1031
			TransactionClient client = new TransactionClient();
2697 chandransh 1032
			Client c = client.getClient();
1033
			List<in.shop2020.model.v1.order.ReturnOrder> tRetOrders =  c.getReturnOrders(warehouseId, 0L, new Date().getTime());
1034
			for(in.shop2020.model.v1.order.ReturnOrder retOrder : tRetOrders){
1035
				retOrders.add(getReturnOrderFromThriftRO(retOrder));
1036
			}
1037
		}catch(Exception e){
1038
			e.printStackTrace();
1039
		}
1040
		return retOrders;
1041
	}
1042
 
2700 chandransh 1043
	public static ReturnOrder getReturnOrderFromThriftRO(in.shop2020.model.v1.order.ReturnOrder tRetOrder){
1044
		ReturnOrder retOrder = new ReturnOrder(tRetOrder.getOrderId(),
1045
				tRetOrder.getWarehouseId(),
1046
				tRetOrder.getItemId(),
1047
				tRetOrder.getProductGroup(),
1048
				tRetOrder.getBrand(),
1049
				tRetOrder.getModelName(),
1050
				tRetOrder.getModelNumber(),
1051
				tRetOrder.getColor(),
1052
				tRetOrder.getInvoiceNumber(),
1053
				tRetOrder.getJacketNumber(),
1054
				tRetOrder.getTotalPrice(),
1055
				tRetOrder.getTransferPrice(),
1056
				false,
1057
				tRetOrder.getCreatedAt());
2697 chandransh 1058
		return retOrder;
1059
	}
1060
 
1061
	/**
2449 chandransh 1062
	 * This method maps a given type to a list of statuses.
1063
	 * 
1064
	 * @param type
1065
	 *            The type of orders to fetch.
1066
	 * @return The list of Thrift statuses associated with a particular order
1067
	 *         type.
1068
	 */
4361 rajveer 1069
	public static List<OrderStatus> getStatuses(OrderType type) {
2449 chandransh 1070
		List<OrderStatus> statuses = new ArrayList<OrderStatus>();
1071
 
1072
		switch (type) {
1073
		case ACCEPTED:
1074
			statuses.add(OrderStatus.ACCEPTED);
1075
			break;
1076
 
4361 rajveer 1077
		case ALL_PENDING:
1078
			statuses.add(OrderStatus.SUBMITTED_FOR_PROCESSING);
4421 mandeep.dh 1079
			statuses.add(OrderStatus.CAPTURE_IN_PROCESS);
4361 rajveer 1080
			statuses.add(OrderStatus.INVENTORY_LOW);
1081
			statuses.add(OrderStatus.LOW_INV_PO_RAISED);
1082
			statuses.add(OrderStatus.LOW_INV_REVERSAL_IN_PROCESS);
1083
			statuses.add(OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT);
2449 chandransh 1084
			break;
1085
 
1086
		case NEW:
1087
			statuses.add(OrderStatus.SUBMITTED_FOR_PROCESSING);
4421 mandeep.dh 1088
			statuses.add(OrderStatus.CAPTURE_IN_PROCESS);
2449 chandransh 1089
			break;
1090
 
1091
		case BILLED:
1092
			statuses.add(OrderStatus.BILLED);
1093
			break;
1094
 
4308 rajveer 1095
		case LOW_INVENTORY:
2449 chandransh 1096
			statuses.add(OrderStatus.INVENTORY_LOW);
1097
			break;
4248 rajveer 1098
 
4308 rajveer 1099
		case PO_RAISED:
1100
			statuses.add(OrderStatus.LOW_INV_PO_RAISED);
1101
			break;
1102
 
1103
		case REVERSAL_INITIATED:
1104
			statuses.add(OrderStatus.LOW_INV_REVERSAL_IN_PROCESS);
1105
			break;
1106
 
1107
		case NOT_AVAILABLE:
1108
			statuses.add(OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT);
1109
			break;
1110
 
4248 rajveer 1111
		case CANCEL_CONFIRMED:
1112
			statuses.add(OrderStatus.CANCEL_REQUEST_CONFIRMED);
1113
			break;
2449 chandransh 1114
 
4459 rajveer 1115
		case DOA_REQUEST_AUTHORIZED:
1116
			statuses.add(OrderStatus.DOA_REQUEST_AUTHORIZED);
4515 mandeep.dh 1117
			statuses.add(OrderStatus.DOA_PICKUP_REQUEST_RAISED);
4459 rajveer 1118
			break;
1119
 
4666 rajveer 1120
		case LOST_IN_TRANSIT:
1121
			statuses.add(OrderStatus.LOST_IN_TRANSIT);
1122
			break;
1123
 
4459 rajveer 1124
		case DOA_LOST_IN_TRANSIT:
1125
			statuses.add(OrderStatus.DOA_LOST_IN_TRANSIT);
4478 rajveer 1126
			break;
1127
 
1128
		case DOA_RECEIVED_DAMAGED:
4459 rajveer 1129
			statuses.add(OrderStatus.DOA_RECEIVED_DAMAGED);
1130
			break;
4495 rajveer 1131
 
1132
		case RET_REQUEST_AUTHORIZED:
1133
			statuses.add(OrderStatus.RET_REQUEST_AUTHORIZED);
4515 mandeep.dh 1134
			statuses.add(OrderStatus.RET_PICKUP_REQUEST_RAISED);
4495 rajveer 1135
			break;
1136
 
1137
		case RET_AWAITED:
1138
			statuses.add(OrderStatus.RET_RETURN_IN_TRANSIT);
4515 mandeep.dh 1139
			statuses.add(OrderStatus.RET_PICKUP_CONFIRMED);
4495 rajveer 1140
			break;
4459 rajveer 1141
 
4495 rajveer 1142
		case RET_RECEIVED_PRESTINE:
1143
			statuses.add(OrderStatus.RET_RECEIVED_PRESTINE);
4515 mandeep.dh 1144
			statuses.add(OrderStatus.RET_PRODUCT_USABLE);
4495 rajveer 1145
			break;
1146
 
1147
		case RET_LOST_IN_TRANSIT:
1148
			statuses.add(OrderStatus.RET_LOST_IN_TRANSIT);
1149
			break;
1150
 
1151
		case RET_RECEIVED_DAMAGED:
1152
			statuses.add(OrderStatus.RET_RECEIVED_DAMAGED);
4515 mandeep.dh 1153
			statuses.add(OrderStatus.RET_PRODUCT_UNUSABLE);
4495 rajveer 1154
			break;
1155
 
2449 chandransh 1156
		case REJECTED:
1157
			statuses.add(OrderStatus.REJECTED);
1158
			break;
1159
 
1160
		case SHIPPED:
1161
			statuses.add(OrderStatus.SHIPPED_FROM_WH);
1162
			statuses.add(OrderStatus.SHIPPED_TO_LOGST);
5016 phani.kuma 1163
			statuses.add(OrderStatus.SHIPPED_TO_DESTINATION_CITY);
1164
			statuses.add(OrderStatus.REACHED_DESTINATION_CITY);
1165
			statuses.add(OrderStatus.FIRST_DELIVERY_ATTEMPT_MADE);
2449 chandransh 1166
			break;
1167
 
1168
		case DELIVERED:
1169
			statuses.add(OrderStatus.DELIVERY_SUCCESS);
4452 rajveer 1170
			statuses.add(OrderStatus.DOA_PICKUP_REQUEST_RAISED);
2449 chandransh 1171
			break;
2610 chandransh 1172
 
1173
		case DOA_AWAITED:
4452 rajveer 1174
			statuses.add(OrderStatus.DOA_PICKUP_CONFIRMED);
2610 chandransh 1175
			statuses.add(OrderStatus.DOA_RETURN_IN_TRANSIT);
4452 rajveer 1176
			statuses.add(OrderStatus.DOA_RECEIVED_PRESTINE);
2610 chandransh 1177
			break;
2449 chandransh 1178
 
4495 rajveer 1179
		case RTO_AWAITED:
4484 rajveer 1180
			statuses.add(OrderStatus.RTO_IN_TRANSIT);
2509 chandransh 1181
			break;
1182
 
4515 mandeep.dh 1183
        case RTO_RECEIVED_DAMAGED:
1184
            statuses.add(OrderStatus.RTO_RECEIVED_DAMAGED);
1185
            break;
1186
 
1187
        case DOA_RECEIVED_PRESTINE:
2610 chandransh 1188
			statuses.add(OrderStatus.DOA_CERT_VALID);
4515 mandeep.dh 1189
			statuses.add(OrderStatus.DOA_CERT_INVALID);
2610 chandransh 1190
			break;
1191
 
4495 rajveer 1192
		case RTO_RETURNED:
4484 rajveer 1193
			statuses.add(OrderStatus.RTO_RECEIVED_PRESTINE);
2509 chandransh 1194
			break;
1195
 
2628 chandransh 1196
		case RESHIPPED:
4484 rajveer 1197
			statuses.add(OrderStatus.RTO_RESHIPPED);
2628 chandransh 1198
			statuses.add(OrderStatus.DOA_INVALID_RESHIPPED);
4452 rajveer 1199
			statuses.add(OrderStatus.DOA_VALID_RESHIPPED);
2628 chandransh 1200
			break;
1201
 
1202
		case REFUNDED:
4682 rajveer 1203
		    statuses.add(OrderStatus.COD_VERIFICATION_FAILED);
4484 rajveer 1204
			statuses.add(OrderStatus.RTO_REFUNDED);
2628 chandransh 1205
			statuses.add(OrderStatus.DOA_INVALID_REFUNDED);
1206
			statuses.add(OrderStatus.DOA_VALID_REFUNDED);
4682 rajveer 1207
			statuses.add(OrderStatus.CANCELLED_DUE_TO_LOW_INVENTORY);
2628 chandransh 1208
			break;
2509 chandransh 1209
 
3065 chandransh 1210
		case VERIFICATION_PENDING:
4664 rajveer 1211
		    statuses.add(OrderStatus.COD_VERIFICATION_PENDING);
3065 chandransh 1212
		    break;
2449 chandransh 1213
		default:
1214
			break;
1215
		}
1216
		return statuses;
1217
	}
13146 manish.sha 1218
 
1219
	public static List<Long> getEligibleOrdersToBeAccepted(Order order){
1220
		List<Long> orders = new ArrayList<Long>();
1221
		try {
1222
 
1223
			TransactionClient client = new TransactionClient();
1224
			Client c = client.getClient();
1225
 
1226
			in.shop2020.model.v1.order.Order thriftOrder = c.getOrder(order.getOrderId());
1227
			long provider_id = thriftOrder.getLogistics_provider_id();
1228
			boolean cod = thriftOrder.isLogisticsCod();
1229
 
1230
			List<in.shop2020.model.v1.order.Order> torders = c.getOrdersForTransaction(thriftOrder.getTransactionId(), thriftOrder.getCustomer_id());
1231
			for(in.shop2020.model.v1.order.Order torder: torders){
1232
				if(torder.getLogistics_provider_id() == provider_id && torder.isLogisticsCod() == cod){
1233
					orders.add(torder.getId());
1234
				}
1235
			}
1236
 
1237
		}catch(Exception e){
1238
			e.printStackTrace();
1239
		}
1240
		return orders;
1241
	}
1242
 
1243
	public static String getItemDisplayName(LineItem lineitem){
1244
		StringBuffer itemName = new StringBuffer();
1245
        if (lineitem.getBrand() != null)
1246
            itemName.append(lineitem.getBrand() + " ");
1247
        if (lineitem.getModel_name() != null)
1248
            itemName.append(lineitem.getModel_name() + " ");
1249
        if (lineitem.getModel_number() != null)
1250
            itemName.append(lineitem.getModel_number() + " ");
1251
        if (lineitem.getColor() != null
1252
                && !lineitem.getColor().trim().equals("NA"))
1253
            itemName.append("(" + lineitem.getColor() + ")");
1254
 
1255
        return itemName.toString();
1256
	}
1257
 
1258
	public static String getProductName(in.shop2020.model.v1.catalog.Item item){
1259
		StringBuffer itemName = new StringBuffer();
1260
        if (item.getBrand() != null)
1261
            itemName.append(item.getBrand() + " ");
1262
        if (item.getModelName() != null)
1263
            itemName.append(item.getModelName() + " ");
1264
        if (item.getModelNumber() != null)
1265
            itemName.append(item.getModelNumber() + " ");
1266
        if (item.getColor() != null
1267
                && !item.getColor().trim().equals("NA"))
1268
            itemName.append("(" + item.getColor() + ")");
1269
 
1270
        return itemName.toString();
1271
	}
19050 manish.sha 1272
 
1273
	public static List<Long> loadVirtualWarehouseDetails(){
1274
		EhcacheWrapper<String, List<Long>> virtualWhCache = new EhcacheWrapper<String, List<Long>>(
1275
				"VirtualWarehouses", CacheManager.create());
1276
 
1277
		List<Long> virtualWarehouseIds = virtualWhCache.get("virtual_warehouses");
1278
 
1279
		if(virtualWarehouseIds!=null && virtualWarehouseIds.size()>0){
19052 manish.sha 1280
			System.out.println("Virtual Warehouse Exists");
1281
			logger.info("Virtual Warehouse Exists");
19050 manish.sha 1282
			return virtualWarehouseIds;
1283
		}else{
19052 manish.sha 1284
			System.out.println("Virtual Warehouse Not Exists");
1285
			logger.info("Virtual Warehouse Not Exists");
19050 manish.sha 1286
			virtualWarehouseIds = new ArrayList<Long>();
1287
			try{
1288
				in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = new InventoryClient().getClient();
1289
				List<Warehouse> allWarehouses = inventoryClient.getWarehouses(null, null, 0, 0, 0);
1290
				for(Warehouse wh:allWarehouses){
1291
					if(wh.getWarehouseType()==WarehouseType.THIRD_PARTY){
1292
						virtualWarehouseIds.add(wh.getId());
1293
					}
1294
				}
1295
			}catch(Exception e){
1296
				e.printStackTrace();
1297
			}
1298
			virtualWhCache.put("virtual_warehouses", virtualWarehouseIds);
1299
		}
1300
 
1301
		return virtualWarehouseIds;
1302
	}
493 rajveer 1303
}