Subversion Repositories SmartDukaan

Rev

Rev 19228 | Rev 19263 | 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
					}
314
					categoryOrderCount = categoryOrderCount+orders.size();
19004 manish.sha 315
				}
19260 manish.sha 316
 
19004 manish.sha 317
			}
318
 
493 rajveer 319
		}catch(Exception e){
2449 chandransh 320
			e.printStackTrace();
493 rajveer 321
		}
322
		return orders;
323
	}
324
 
2449 chandransh 325
	/**
4133 chandransh 326
	 * Wrapper around the method of same name in the transaction service. This
327
	 * method uses a mapping of <i>type</i> to <i>status</i> to get the count of
328
	 * all orders with a given status.
329
	 * 
330
	 * @param type
331
	 *            The type of orders to return.
332
	 * @param warehouseId
333
	 *            The warehouse for which the orders should be queried.
334
	 * @return The count of orders of the given type assigned to the given
335
	 *         warehouse.
336
	 */
19260 manish.sha 337
	public static int getOrderCount(OrderType type, long warehouseId, long source, OrderCategory orderCategory){
4133 chandransh 338
		List<OrderStatus> statuses = getStatuses(type);
339
 
340
		int count = 0;
341
		try{
19260 manish.sha 342
			if(type==OrderType.ALL_PENDING && orderCategory!=OrderCategory.NONE){
343
				return categoryOrderCount;
344
			}
345
			else{
346
				TransactionClient txnClient = new TransactionClient();
347
				Client client = txnClient.getClient();
348
				count += client.getOrderCount(statuses, warehouseId, source);
349
			}
4133 chandransh 350
		}catch(Exception e){
351
			e.printStackTrace();
352
		}
353
		return count;
354
	}
355
 
356
	/**
2449 chandransh 357
	 * Calls the same method of the transaction service and returns the status
358
	 * returned. Catches all exceptions that are raised and returns false in
359
	 * that case.
360
	 * 
361
	 * @param warehouseId
362
	 *            The warehouse for which the orders should be marked as
363
	 *            manifested.
364
	 * @param providerId
365
	 *            The provider for which the orders should be marked as
366
	 *            manifested.
3065 chandransh 367
	 * @param cod
368
	 *             Whether cod orders have to be marked as manifested
2449 chandransh 369
	 * @return True if everything goes fine, false otherwise.
370
	 */
5769 rajveer 371
	public static Map<Long, Long> getBilledOrders(long warehouseId, String providerId, boolean cod){
372
		Map<Long, Long> orders = new HashMap<Long, Long>();
760 chandransh 373
		try {
374
			long provider_id = Long.parseLong(providerId);
3132 rajveer 375
			TransactionClient client = new TransactionClient();
760 chandransh 376
			Client c = client.getClient();
4790 rajveer 377
 
378
			List<OrderStatus> statuses = new ArrayList<OrderStatus>();
379
			statuses.add(OrderStatus.BILLED);
8303 amar.kumar 380
			List<in.shop2020.model.v1.order.Order> torders = c.getOrdersInBatch(statuses, 0, 0, warehouseId, 0);
4790 rajveer 381
			for(in.shop2020.model.v1.order.Order torder: torders){
5556 rajveer 382
				if(torder.getLogistics_provider_id() == provider_id && torder.isLogisticsCod() == cod){
5769 rajveer 383
					orders.put(torder.getId(), torder.getPickupStoreId());
4790 rajveer 384
				}
4411 rajveer 385
			}
386
 
760 chandransh 387
		}catch(Exception e){
388
			e.printStackTrace();
389
		}
4790 rajveer 390
		return orders;
760 chandransh 391
	}
2449 chandransh 392
 
4790 rajveer 393
	public static boolean generateCourierDetailsFile(List<Long> orderIds, long providerId, long warehouseId, boolean isCod){
4411 rajveer 394
		Calendar date = new GregorianCalendar();
395
		int year = date.get(Calendar.YEAR);
396
		int month = date.get(Calendar.MONTH) +1;
397
		int day = date.get(Calendar.DAY_OF_MONTH);
398
 
399
		String fileNameSuffix = "-" + warehouseId + "-"+ providerId + "-" + year + "-" + month + "-" + day;
400
		if(isCod){
401
		    fileNameSuffix = "cod" + fileNameSuffix ;
402
		}
403
		else{
404
		    fileNameSuffix = "prepaid" + fileNameSuffix;
405
		}
406
 
407
		try {
4790 rajveer 408
			String fileName = courierDetailsPath + "/courier-details-" + fileNameSuffix + "-temp.xls";
4415 rajveer 409
			FileOutputStream f = new FileOutputStream(fileName);
4411 rajveer 410
			CourierDetailsGenerator courierDetailsGenerator = new CourierDetailsGenerator();
4790 rajveer 411
			ByteArrayOutputStream baosXLS = courierDetailsGenerator.generateCourierDetails(orderIds, warehouseId, providerId, isCod);
4411 rajveer 412
			baosXLS.writeTo(f);
413
			f.close();
414
		} catch (FileNotFoundException e) {
415
			logger.error("Unable to create the courier details file", e);
416
		} catch (IOException e) {
417
			logger.error("Unable to create the courier details file", e);
418
		}
419
 
420
		CourierDetailsReportMerger merger = new CourierDetailsReportMerger();
421
		try {
422
			Map<Long, String> warehouseIdFileNames = new HashMap<Long, String>();
4790 rajveer 423
			String fName;
424
			fName = courierDetailsPath + "/courier-details-" + fileNameSuffix + "-temp.xls";
425
			if((new File(fName)).exists()){
426
				warehouseIdFileNames.put(0L, fName);
4411 rajveer 427
			}
4790 rajveer 428
			fName = courierDetailsPath + "/courier-details-" + fileNameSuffix + ".xls";
429
			if((new File(fName)).exists()){
430
				warehouseIdFileNames.put(1L, fName);
4411 rajveer 431
			}
4790 rajveer 432
			ByteArrayOutputStream binXLS = merger.mergeCourierDetailsReports(warehouseIdFileNames);
433
			FileOutputStream f = new FileOutputStream(courierDetailsPath + "/courier-details-" + fileNameSuffix + ".xls");
4411 rajveer 434
			binXLS.writeTo(f);
435
			f.close();
4790 rajveer 436
			File tempFile = new File(courierDetailsPath + "/courier-details-" + fileNameSuffix + "-temp.xls");
437
			if(tempFile.exists()){
438
				tempFile.delete();
439
			}
4411 rajveer 440
		} catch (FileNotFoundException e) {
441
			logger.error("Error while creating the Courier Details report", e);
442
		} catch (IOException e) {
443
			logger.error("IO error while writing the Courier Details report", e);
444
		}
445
		return true;
446
	}
447
 
19224 manish.sha 448
 
449
	public static List<Order> getOrdersFromThirftOrders(List<in.shop2020.model.v1.order.Order> orders){
450
		List<Order> ordersToReturn = new ArrayList<Order>();
19226 manish.sha 451
		Map<Long, Warehouse> warehousesMap = CatalogUtils.getAllWarehousesForBillingWarehouse(0); 
19224 manish.sha 452
		List<Long> itemIds = new ArrayList<Long>();
453
		Map<Long, List<in.shop2020.model.v1.order.Order>> txnOrdersMap = new HashMap<Long, List<in.shop2020.model.v1.order.Order>>();
454
		SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy");
455
		SimpleDateFormat newSdf = new SimpleDateFormat("yyyy-MM-dd");
456
		NumberFormat formatter = new DecimalFormat("#0.000");
457
		NumberFormat rformatter = new DecimalFormat("#0.00");
458
		Date date = new Date(System.currentTimeMillis());
459
		for(in.shop2020.model.v1.order.Order t_order : orders){
460
			if(!itemIds.contains(t_order.getLineitems().get(0).getItem_id())){
461
				itemIds.add(t_order.getLineitems().get(0).getItem_id());
462
			}
463
			List<in.shop2020.model.v1.order.Order> txnOrders = null;
464
			if(txnOrdersMap.containsKey(t_order.getTransactionId())){
465
				txnOrders = txnOrdersMap.get(t_order.getTransactionId());				
466
			}else{
467
				txnOrders = new ArrayList<in.shop2020.model.v1.order.Order>();
468
			}
469
			txnOrders.add(t_order);
470
			txnOrdersMap.put(t_order.getTransactionId(), txnOrders);
471
		}
472
		try {
473
			in.shop2020.model.v1.catalog.CatalogService.Client client = new CatalogClient().getClient();
474
			Map<Long, Item> itemsMap = client.getItems(itemIds);
475
			in.shop2020.logistics.LogisticsService.Client logisticsClient = new LogisticsClient().getClient();
476
			List<in.shop2020.logistics.Provider> providers = logisticsClient.getAllProviders();
477
			Map<Long,in.shop2020.logistics.Provider> providersMap = new HashMap<Long, in.shop2020.logistics.Provider>();
478
 
479
			for(in.shop2020.logistics.Provider provider : providers){
480
				providersMap.put(provider.getId(), provider);
481
			}
482
 
483
			in.shop2020.model.v1.order.TransactionService.Client tClient = new TransactionClient().getClient();
19227 manish.sha 484
			InventoryClient inventoryServiceClient = new InventoryClient();
485
			InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
19224 manish.sha 486
			for(in.shop2020.model.v1.order.Order t_order : orders){
487
				LineItem lineItem = t_order.getLineitems().get(0);
488
				String pickFromWarehouse = warehousesMap.get(t_order.getFulfilmentWarehouseId()).getDisplayName();
489
				Item item = itemsMap.get(lineItem.getItem_id());
490
				in.shop2020.logistics.Provider provider = providersMap.get(t_order.getLogistics_provider_id());
491
				Warehouse fulfillmentWarehouse = warehousesMap.get(t_order.getFulfilmentWarehouseId());
492
				Map<Long, Map<String, String>> acceptTogetherOrdersMap = null;
493
				Map<Long, Map<String, String>> billTogetherOrdersMap = null;
494
				if(!t_order.isSetAccepted_timestamp()){
495
					acceptTogetherOrdersMap = new HashMap<Long, Map<String, String>>();
496
					Map<String, String> orderValuesMap = new HashMap<String, String>();
497
					orderValuesMap.put("ProductName", getItemDisplayName(lineItem));
498
					orderValuesMap.put("Quantity", lineItem.getQuantity()+"");
499
					orderValuesMap.put("Promised_Shipping", sdf.format(new Date(t_order.getPromised_shipping_time())));     
500
					orderValuesMap.put("Weight", formatter.format(lineItem.getUnit_weight()));   
501
					orderValuesMap.put("UnitPrice", rformatter.format(lineItem.getUnit_price()));
502
					orderValuesMap.put("PackQuantity", item.getPackQuantity()+"");
503
					orderValuesMap.put("WarehouseType", fulfillmentWarehouse.getWarehouseType().toString());
504
					acceptTogetherOrdersMap.put(t_order.getId(), orderValuesMap);
505
					List<in.shop2020.model.v1.order.Order> taOrders = null;
506
					if(txnOrdersMap.containsKey(t_order.getTransactionId())){
507
						taOrders = txnOrdersMap.get(t_order.getTransactionId());
508
					}else{
509
						try{
510
							taOrders = tClient.getOrdersForTransaction(t_order.getTransactionId(), t_order.getCustomer_id());
511
						}catch(Exception te){
512
							tClient = new TransactionClient().getClient();
513
							taOrders = tClient.getOrdersForTransaction(t_order.getTransactionId(), t_order.getCustomer_id());
514
						}
515
					}
516
					for(in.shop2020.model.v1.order.Order taOrder : taOrders){
517
						LineItem lineItem1 = taOrder.getLineitems().get(0);
518
						if(t_order.getId()==taOrder.getId()){
519
							continue;
520
						}
521
						else if(taOrder.getSource()!=OrderSource.WEBSITE.getValue()){
522
							continue;
523
						}else{
524
							orderValuesMap = new HashMap<String, String>();
525
							if(provider.isGroupShipmentAllowed() && !taOrder.isSetAccepted_timestamp() && t_order.getStatus()==taOrder.getStatus() 
526
									&& taOrder.getLogistics_provider_id()==t_order.getLogistics_provider_id() 
527
									&& taOrder.isLogisticsCod()==t_order.isLogisticsCod() && taOrder.getWarehouse_id() == t_order.getWarehouse_id() 
528
									&& taOrder.getOrderType() == t_order.getOrderType() && taOrder.getPickupStoreId() == t_order.getPickupStoreId()){
529
								orderValuesMap.put("ProductName", getItemDisplayName(lineItem1));
530
								orderValuesMap.put("Quantity", lineItem1.getQuantity()+"");
19227 manish.sha 531
								if(warehousesMap.containsKey(taOrder.getFulfilmentWarehouseId())){
532
									fulfillmentWarehouse = warehousesMap.get(taOrder.getFulfilmentWarehouseId());
533
								}else{
534
									try{
535
										fulfillmentWarehouse = inventoryClient.getWarehouse(taOrder.getFulfilmentWarehouseId());
536
										warehousesMap.put(fulfillmentWarehouse.getId(), fulfillmentWarehouse);
537
									}
538
									catch(Exception ie){
539
										ie.printStackTrace();
540
										inventoryClient = inventoryServiceClient.getClient();
541
										fulfillmentWarehouse = inventoryClient.getWarehouse(taOrder.getFulfilmentWarehouseId());
542
										warehousesMap.put(fulfillmentWarehouse.getId(), fulfillmentWarehouse);
543
									}
544
								}
19224 manish.sha 545
								orderValuesMap.put("WarehouseType", fulfillmentWarehouse.getWarehouseType().toString());
546
								orderValuesMap.put("Promised_Shipping", sdf.format(new Date(taOrder.getPromised_shipping_time())));
547
								orderValuesMap.put("UnitPrice", rformatter.format(lineItem1.getUnit_price()));
548
								orderValuesMap.put("Weight", formatter.format(lineItem1.getUnit_weight()));
549
								if(itemsMap.containsKey(lineItem1.getItem_id())){
550
									Item orderItem = itemsMap.get(lineItem1.getItem_id());
551
									orderValuesMap.put("PackQuantity", orderItem.getPackQuantity()+"");
552
								}else{
553
									try{
554
										Item orderItem = client.getItem(lineItem1.getItem_id());
555
										orderValuesMap.put("PackQuantity", orderItem.getPackQuantity()+"");
556
										itemsMap.put(orderItem.getId(), orderItem);
557
									}catch(Exception ce){
558
										ce.printStackTrace();
559
										client = new CatalogClient().getClient();
560
										Item orderItem = client.getItem(lineItem1.getItem_id());
561
										orderValuesMap.put("PackQuantity", orderItem.getPackQuantity()+"");
562
										itemsMap.put(orderItem.getId(), orderItem);
563
									}
564
								}
565
							}
566
							if(orderValuesMap!=null && orderValuesMap.size()>0){
567
	            				acceptTogetherOrdersMap.put(taOrder.getId(), orderValuesMap);
568
	            			}
569
						}
570
					}
571
				}
572
 
573
				if(t_order.isSetLogisticsTransactionId()){
574
					billTogetherOrdersMap = new HashMap<Long, Map<String, String>>();
575
	            	Map<String, String> orderValuesMap = new HashMap<String, String>();
576
		            if(t_order.getStatus()==OrderStatus.ACCEPTED || t_order.getStatus()==OrderStatus.RTO_IN_TRANSIT ){
577
		            	orderValuesMap.put("ProductName", getItemDisplayName(lineItem));
578
		            	orderValuesMap.put("Quantity", lineItem.getQuantity()+"");
579
		            	if(ItemType.SERIALIZED==item.getType()){
580
		            		orderValuesMap.put("IsSerialized", "true");
581
		            	}else{
582
		            		orderValuesMap.put("IsSerialized", "false");
583
		            	}
584
		            	if(t_order.isSetFreebieItemId() && t_order.getFreebieItemId()!=0){
585
		            		orderValuesMap.put("IsFreebie", "true");
586
		            	} else {
587
		            		orderValuesMap.put("IsFreebie", "false");
588
		            	}
589
		            	billTogetherOrdersMap.put(t_order.getId(), orderValuesMap);
590
	            	}
591
 
592
		            List<in.shop2020.model.v1.order.Order> taOrders = null;
593
		            try{
594
		            	taOrders = tClient.getGroupOrdersByLogisticsTxnId(t_order.getLogisticsTransactionId());
595
		            }catch(Exception te){
596
		            	tClient = new TransactionClient().getClient();
597
		            	taOrders = tClient.getGroupOrdersByLogisticsTxnId(t_order.getLogisticsTransactionId());
598
		            }
599
 
600
		            for(in.shop2020.model.v1.order.Order taOrder: taOrders){
601
	            		if(taOrder.getStatus()==OrderStatus.ACCEPTED || taOrder.getStatus()==OrderStatus.RTO_IN_TRANSIT ){
602
		            		if(taOrder.getId()==t_order.getId()){
603
		            			continue;
604
		            		} else {
605
		            			orderValuesMap = new HashMap<String, String>();
606
		            			Item orderItem = null;
607
		            			if(itemsMap.containsKey(taOrder.getLineitems().get(0).getItem_id())){
608
		            				orderItem = itemsMap.get(taOrder.getId());
609
		            			}else{
610
									try{
611
										orderItem = client.getItem(taOrder.getLineitems().get(0).getItem_id());
612
										itemsMap.put(orderItem.getId(), orderItem);
613
									}catch(Exception ce){
614
										ce.printStackTrace();
615
										client = new CatalogClient().getClient();
616
										orderItem = client.getItem(taOrder.getLineitems().get(0).getItem_id());
617
										itemsMap.put(orderItem.getId(), orderItem);
618
									}
619
								}
620
 
621
		            			orderValuesMap.put("ProductName", getProductName(orderItem));
622
		                    	orderValuesMap.put("Quantity", taOrder.getLineitems().get(0).getQuantity()+"");
623
		                    	if(ItemType.SERIALIZED==orderItem.getType()){
624
		                    		orderValuesMap.put("IsSerialized", "true");
625
		                    	}else{
626
		                    		orderValuesMap.put("IsSerialized", "false");
627
		                    	}
628
		                    	if(taOrder.isSetFreebieItemId() && taOrder.getFreebieItemId()!=0){
629
		                    		orderValuesMap.put("IsFreebie", "true");
630
		                    	} else {
631
		                    		orderValuesMap.put("IsFreebie", "false");
632
		                    	}
633
		                    	billTogetherOrdersMap.put(taOrder.getId(), orderValuesMap);
634
		            		}
635
	            		}
636
	            	}
637
 
638
				}else{
639
	            	billTogetherOrdersMap = new HashMap<Long, Map<String, String>>();
640
	            	Map<String, String> orderValuesMap = new HashMap<String, String>();
641
	            	orderValuesMap.put("ProductName", getItemDisplayName(lineItem));
642
	            	orderValuesMap.put("Quantity", lineItem.getQuantity()+"");
643
	            	if(ItemType.SERIALIZED==item.getType()){
644
	            		orderValuesMap.put("IsSerialized", "true");
645
	            	}else{
646
	            		orderValuesMap.put("IsSerialized", "false");
647
	            	}
648
	            	if(t_order.isSetFreebieItemId() && t_order.getFreebieItemId()!=0){
649
	            		orderValuesMap.put("IsFreebie", "true");
650
	            	} else {
651
	            		orderValuesMap.put("IsFreebie", "false");
652
	            	}
653
	            	billTogetherOrdersMap.put(t_order.getId(), orderValuesMap);
654
	            }
655
				String delayReason = null;
656
				if(t_order.getDelayReason() != null)
657
				    delayReason = t_order.getDelayReason().name();
658
 
659
				String osource = OrderSource.findByValue((int)t_order.getSource()).toString();
660
 
661
				Order order = new Order(t_order.getId(),
662
						t_order.getCustomer_id(),
663
						t_order.getCustomer_name(),
664
						t_order.getCustomer_mobilenumber(),
665
						t_order.getCustomer_pincode(),
666
						t_order.getCustomer_address1(),
667
						t_order.getCustomer_address2(),
668
						t_order.getCustomer_city(),
669
						t_order.getCustomer_state(),
670
						t_order.getCustomer_email(),
671
						t_order.getCreated_timestamp(),
672
						t_order.getShipping_timestamp(),
673
						t_order.getVerification_timestamp(),
674
						t_order.getExpected_delivery_time(),
675
						t_order.getPromised_delivery_time(),
676
						t_order.getExpected_shipping_time(),
677
						t_order.getPromised_shipping_time(),
678
						t_order.getStatus().getValue(),
679
						t_order.getStatusDescription(),
680
						t_order.getOrderType().name(),
681
						lineItem.getItem_id(),
682
						lineItem.getProductGroup(),
683
						lineItem.getBrand(),
684
						lineItem.getModel_name(),
685
						lineItem.getModel_number(),
686
						lineItem.getColor(),
687
						lineItem.getExtra_info(),
688
						lineItem.getDealText(),
689
						lineItem.getQuantity(),
690
						t_order.getTotal_amount(),
691
						t_order.getTotal_weight(),
692
						t_order.getAirwaybill_no(),
693
						t_order.getBilled_by(),
694
						t_order.getInvoice_number(),
695
						t_order.getJacket_number(),
696
						lineItem.getItem_number(),
697
						lineItem.getSerial_number(),
698
						t_order.getBatchNo(),
699
						t_order.getSerialNo(),
700
						t_order.isDoaFlag(),
701
						t_order.getPickupRequestNo(),
702
						t_order.isLogisticsCod(),
703
						delayReason,
704
						pickFromWarehouse,
705
						ItemType.SERIALIZED.equals(item.getType()),
706
						item.isHasItemNo(),
707
						t_order.getFulfilmentWarehouseId(),
708
						t_order.getWarehouse_id(),
709
						t_order.getPickupStoreId(),
710
						t_order.getFreebieItemId(),
711
						osource, 
712
						new Long(t_order.getProductCondition().getValue()),
713
						t_order.getTransactionId());
714
				if(acceptTogetherOrdersMap!=null && acceptTogetherOrdersMap.size()>0){
715
					order.setAcceptTogetherOrdersMap(acceptTogetherOrdersMap);
716
				}
717
				if(billTogetherOrdersMap!=null && billTogetherOrdersMap.size()>0){
718
					order.setBillTogetherOrdersMap(billTogetherOrdersMap);
719
				}
720
				if(t_order.isSetLogisticsTransactionId()){
721
					order.setLogisticsTransactionId(t_order.getLogisticsTransactionId());
722
				}
723
 
724
 
725
				long currentDateTime = 0;
726
				long promisedShippingTime =0 ;
727
				long currentTime = date.getTime();
728
				try{
729
					currentDateTime = newSdf.parse(newSdf.format(date)).getTime();
730
					promisedShippingTime = newSdf.parse(newSdf.format(new Date(order.getPromisedShippingTime()))).getTime();
731
				}catch(Exception e){
732
					e.printStackTrace();
733
				}
734
				if(promisedShippingTime >0 && (order.getStatus()==3 || order.getStatus()==5 || order.getStatus()==41 ||
735
						order.getStatus()==35 || order.getStatus()==36 || order.getStatus()==37)){
736
					if(promisedShippingTime <= currentDateTime){
737
						if(loadVirtualWarehouseDetails().contains(order.getFulfilmentWarehouseId())){
738
							order.setAlert(OrderAlert.TODAY_SHIPPING_NOT_IN_STOCK);
739
						}else{
740
							order.setAlert(OrderAlert.TODAY_SHIPPING_IN_STOCK);
741
						}
742
					}else{
743
						if(!loadVirtualWarehouseDetails().contains(order.getFulfilmentWarehouseId())){
744
							order.setAlert(OrderAlert.LATER_SHIPPING_IN_STOCK);
745
						}
746
					}
747
				}
748
 
749
				ordersToReturn.add(order);
750
			}
751
		}
752
		catch (Exception e) {
753
			e.printStackTrace();
754
		}
755
 
756
		return ordersToReturn;
757
 
758
	}
759
 
760
 
671 chandransh 761
	/**
2449 chandransh 762
	 * 
671 chandransh 763
	 * @param t_order
2449 chandransh 764
	 *            A thrift order object with line items.
765
	 * @return an Order bean which can be used for rendering on the client side.
671 chandransh 766
	 */
767
	public static Order getOrderFromThriftOrder(in.shop2020.model.v1.order.Order t_order) {
914 chandransh 768
		LineItem lineItem = t_order.getLineitems().get(0);
5110 mandeep.dh 769
		String pickFromWarehouse = null;
770
		Item item = null;
19004 manish.sha 771
		String warehouseType = "";
13146 manish.sha 772
 
773
	    Map<Long, Map<String, String>> acceptTogetherOrdersMap = null;
774
	    Map<Long, Map<String, String>> billTogetherOrdersMap = null;
5110 mandeep.dh 775
 
776
        try {
5945 mandeep.dh 777
            in.shop2020.model.v1.catalog.CatalogService.Client client = new CatalogClient().getClient();
5948 mandeep.dh 778
            in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = new InventoryClient().getClient();
5110 mandeep.dh 779
            item = client.getItem(lineItem.getItem_id());
780
            pickFromWarehouse = CatalogUtils.getWarehousesForBillingWarehouse(t_order.getWarehouse_id())
781
                                    .get(t_order.getFulfilmentWarehouseId());
782
 
783
            if (pickFromWarehouse == null) {
5948 mandeep.dh 784
                Warehouse warehouse = inventoryClient.getWarehouse(t_order.getFulfilmentWarehouseId());
785
                pickFromWarehouse = inventoryClient.getWarehouses(null, InventoryType.GOOD, warehouse.getVendor().getId(), t_order.getWarehouse_id(), 0).get(0).getDisplayName();
13146 manish.sha 786
            }											
787
            if(!t_order.isSetAccepted_timestamp()){
788
            	acceptTogetherOrdersMap = new HashMap<Long, Map<String, String>>();
789
            	Map<String, String> orderValuesMap = new HashMap<String, String>();
790
            	orderValuesMap.put("ProductName", getItemDisplayName(lineItem));
791
				orderValuesMap.put("Quantity", lineItem.getQuantity()+"");
18100 manish.sha 792
				if(!inventoryClient.isAlive()){
793
					inventoryClient = new InventoryClient().getClient();
794
				}
795
				Warehouse fulfillmentWarehouse = inventoryClient.getWarehouse(t_order.getFulfilmentWarehouseId());
19004 manish.sha 796
				warehouseType = fulfillmentWarehouse.getWarehouseType().toString();
18100 manish.sha 797
				orderValuesMap.put("WarehouseType", fulfillmentWarehouse.getWarehouseType().toString());
19054 manish.sha 798
				SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy");
18938 manish.sha 799
				orderValuesMap.put("Promised_Shipping", sdf.format(new Date(t_order.getPromised_shipping_time())));
18964 manish.sha 800
				NumberFormat formatter = new DecimalFormat("#0.000");     
801
				orderValuesMap.put("Weight", formatter.format(t_order.getLineitems().get(0).getUnit_weight()));
802
				formatter = new DecimalFormat("#0.00");   
18938 manish.sha 803
				orderValuesMap.put("UnitPrice", formatter.format(t_order.getLineitems().get(0).getUnit_price()));
18964 manish.sha 804
				orderValuesMap.put("PackQuantity", item.getPackQuantity()+"");
13146 manish.sha 805
				acceptTogetherOrdersMap.put(t_order.getId(), orderValuesMap);
806
            	List<in.shop2020.model.v1.order.Order> taOrders = new TransactionClient().getClient().getOrdersForTransaction(t_order.getTransactionId(), t_order.getCustomer_id());
807
            	in.shop2020.logistics.Provider provider = new LogisticsClient().getClient().getProvider(t_order.getLogistics_provider_id());
808
            	for(in.shop2020.model.v1.order.Order taOrder : taOrders){
809
            		LineItem lineItem1 = taOrder.getLineitems().get(0);
810
            		if(t_order.getId()==taOrder.getId()){
811
            			continue;
13156 manish.sha 812
            		}
813
            		else if(taOrder.getSource()!=OrderSource.WEBSITE.getValue()){
814
            			continue;
815
            		}
816
            		else{
13146 manish.sha 817
            			orderValuesMap = new HashMap<String, String>();
13323 manish.sha 818
            			if(provider.isGroupShipmentAllowed() && !taOrder.isSetAccepted_timestamp() && t_order.getStatus()==taOrder.getStatus() 
819
            					&& taOrder.getLogistics_provider_id()==t_order.getLogistics_provider_id() 
820
            					&& taOrder.isLogisticsCod()==t_order.isLogisticsCod() && taOrder.getWarehouse_id() == t_order.getWarehouse_id() 
821
            					&& taOrder.getOrderType() == t_order.getOrderType() && taOrder.getPickupStoreId() == t_order.getPickupStoreId()){
13146 manish.sha 822
            				orderValuesMap.put("ProductName", getItemDisplayName(lineItem1));
823
            				orderValuesMap.put("Quantity", lineItem1.getQuantity()+"");
18100 manish.sha 824
            				if(!inventoryClient.isAlive()){
825
            					inventoryClient = new InventoryClient().getClient();
826
            				}
827
            				fulfillmentWarehouse = inventoryClient.getWarehouse(taOrder.getFulfilmentWarehouseId());
828
            				orderValuesMap.put("WarehouseType", fulfillmentWarehouse.getWarehouseType().toString());
18938 manish.sha 829
            				orderValuesMap.put("Promised_Shipping", sdf.format(new Date(taOrder.getPromised_shipping_time())));
830
            				orderValuesMap.put("UnitPrice", formatter.format(taOrder.getLineitems().get(0).getUnit_price()));
18964 manish.sha 831
            				formatter = new DecimalFormat("#0.000");   
832
            				orderValuesMap.put("Weight", formatter.format(taOrder.getLineitems().get(0).getUnit_weight()));
833
            				Item orderItem = client.getItem(taOrder.getLineitems().get(0).getItem_id());
834
            				orderValuesMap.put("PackQuantity", orderItem.getPackQuantity()+"");
13146 manish.sha 835
            			}
836
            			if(orderValuesMap!=null && orderValuesMap.size()>0){
837
            				acceptTogetherOrdersMap.put(taOrder.getId(), orderValuesMap);
838
            			}
839
            		}
840
            	}
5110 mandeep.dh 841
            }
13146 manish.sha 842
 
843
            if(t_order.isSetLogisticsTransactionId()){
844
            	billTogetherOrdersMap = new HashMap<Long, Map<String, String>>();
845
            	Map<String, String> orderValuesMap = new HashMap<String, String>();
19091 manish.sha 846
	            if(t_order.getStatus()==OrderStatus.ACCEPTED || t_order.getStatus()==OrderStatus.RTO_IN_TRANSIT ){
18100 manish.sha 847
	            	orderValuesMap.put("ProductName", getItemDisplayName(lineItem));
848
	            	orderValuesMap.put("Quantity", lineItem.getQuantity()+"");
849
	            	if(ItemType.SERIALIZED==item.getType()){
850
	            		orderValuesMap.put("IsSerialized", "true");
851
	            	}else{
852
	            		orderValuesMap.put("IsSerialized", "false");
853
	            	}
854
	            	if(t_order.isSetFreebieItemId() && t_order.getFreebieItemId()!=0){
855
	            		orderValuesMap.put("IsFreebie", "true");
856
	            	} else {
857
	            		orderValuesMap.put("IsFreebie", "false");
858
	            	}
859
	            	billTogetherOrdersMap.put(t_order.getId(), orderValuesMap);
13146 manish.sha 860
            	}
861
            	Map<Long, Item> orderItemMap = new HashMap<Long, Item>();
862
            	List<in.shop2020.model.v1.order.Order> taOrders = new TransactionClient().getClient().getGroupOrdersByLogisticsTxnId(t_order.getLogisticsTransactionId());
863
            	for(in.shop2020.model.v1.order.Order ord1: taOrders){
19091 manish.sha 864
            		if(ord1.getStatus()==OrderStatus.ACCEPTED || ord1.getStatus()==OrderStatus.RTO_IN_TRANSIT ){
18100 manish.sha 865
	            		if(ord1.getId()== t_order.getId()){
866
	            			orderItemMap.put(ord1.getId(), item);
867
	            		} else {
868
		            		if(!client.isAlive()){
869
		            			client = new CatalogClient().getClient();
870
		            		}
871
		            		Item it = client.getItem(ord1.getLineitems().get(0).getItem_id());
872
		            		orderItemMap.put(ord1.getId(), it);
13146 manish.sha 873
	            		}
874
            		}
875
            	}
876
 
877
            	for(in.shop2020.model.v1.order.Order taOrder: taOrders){
19091 manish.sha 878
            		if(taOrder.getStatus()==OrderStatus.ACCEPTED || taOrder.getStatus()==OrderStatus.RTO_IN_TRANSIT ){
18100 manish.sha 879
	            		if(taOrder.getId()==t_order.getId()){
880
	            			continue;
881
	            		} else {
882
	            			orderValuesMap = new HashMap<String, String>();
883
	            			Item orderItem = orderItemMap.get(taOrder.getId());
884
	            			orderValuesMap.put("ProductName", getProductName(orderItem));
885
	                    	orderValuesMap.put("Quantity", taOrder.getLineitems().get(0).getQuantity()+"");
886
	                    	if(ItemType.SERIALIZED==orderItem.getType()){
887
	                    		orderValuesMap.put("IsSerialized", "true");
888
	                    	}else{
889
	                    		orderValuesMap.put("IsSerialized", "false");
890
	                    	}
891
	                    	if(taOrder.isSetFreebieItemId() && taOrder.getFreebieItemId()!=0){
892
	                    		orderValuesMap.put("IsFreebie", "true");
893
	                    	} else {
894
	                    		orderValuesMap.put("IsFreebie", "false");
895
	                    	}
896
	                    	billTogetherOrdersMap.put(taOrder.getId(), orderValuesMap);
897
	            		}
13146 manish.sha 898
            		}
899
            	}
900
            }
901
            else{
902
            	billTogetherOrdersMap = new HashMap<Long, Map<String, String>>();
903
            	Map<String, String> orderValuesMap = new HashMap<String, String>();
904
            	orderValuesMap.put("ProductName", getItemDisplayName(lineItem));
905
            	orderValuesMap.put("Quantity", lineItem.getQuantity()+"");
906
            	if(ItemType.SERIALIZED==item.getType()){
907
            		orderValuesMap.put("IsSerialized", "true");
908
            	}else{
909
            		orderValuesMap.put("IsSerialized", "false");
910
            	}
911
            	if(t_order.isSetFreebieItemId() && t_order.getFreebieItemId()!=0){
912
            		orderValuesMap.put("IsFreebie", "true");
913
            	} else {
914
            		orderValuesMap.put("IsFreebie", "false");
915
            	}
916
            	billTogetherOrdersMap.put(t_order.getId(), orderValuesMap);
917
            }
5110 mandeep.dh 918
		}
919
        catch (Exception e) {
920
            logger.error("Error looking up warehouse: " + t_order.getVendorId(), e);
921
        }
922
 
3553 chandransh 923
		String delayReason = null;
924
		if(t_order.getDelayReason() != null)
7433 rajveer 925
		    delayReason = t_order.getDelayReason().name();
3553 chandransh 926
 
7556 rajveer 927
		String osource = OrderSource.findByValue((int)t_order.getSource()).toString();
7433 rajveer 928
 
966 chandransh 929
		Order order = new Order(t_order.getId(),
930
				t_order.getCustomer_id(),
931
				t_order.getCustomer_name(),
932
				t_order.getCustomer_mobilenumber(),
933
				t_order.getCustomer_pincode(),
934
				t_order.getCustomer_address1(),
935
				t_order.getCustomer_address2(),
936
				t_order.getCustomer_city(),
937
				t_order.getCustomer_state(),
938
				t_order.getCustomer_email(),
939
				t_order.getCreated_timestamp(),
4004 chandransh 940
				t_order.getShipping_timestamp(),
941
				t_order.getVerification_timestamp(),
966 chandransh 942
				t_order.getExpected_delivery_time(),
3994 chandransh 943
				t_order.getPromised_delivery_time(),
4004 chandransh 944
				t_order.getExpected_shipping_time(),
4666 rajveer 945
				t_order.getPromised_shipping_time(),
966 chandransh 946
				t_order.getStatus().getValue(),
947
				t_order.getStatusDescription(),
5527 anupam.sin 948
				t_order.getOrderType().name(),
966 chandransh 949
				lineItem.getItem_id(),
950
				lineItem.getProductGroup(),
951
				lineItem.getBrand(),
952
				lineItem.getModel_name(),
953
				lineItem.getModel_number(),
954
				lineItem.getColor(),
955
				lineItem.getExtra_info(),
4172 rajveer 956
				lineItem.getDealText(),
5387 rajveer 957
				lineItem.getQuantity(),
2782 chandransh 958
				t_order.getTotal_amount(),
959
				t_order.getTotal_weight(),
960
				t_order.getAirwaybill_no(),
961
				t_order.getBilled_by(),
962
				t_order.getInvoice_number(),
963
				t_order.getJacket_number(),
964
				lineItem.getItem_number(),
4659 mandeep.dh 965
				lineItem.getSerial_number(),
3065 chandransh 966
				t_order.getBatchNo(),
967
				t_order.getSerialNo(),
2509 chandransh 968
				t_order.isDoaFlag(),
3065 chandransh 969
				t_order.getPickupRequestNo(),
5556 rajveer 970
				t_order.isLogisticsCod(),
5110 mandeep.dh 971
				delayReason,
972
				pickFromWarehouse,
6028 rajveer 973
				ItemType.SERIALIZED.equals(item.getType()),
974
				item.isHasItemNo(),
5769 rajveer 975
				t_order.getFulfilmentWarehouseId(),
9263 amar.kumar 976
				t_order.getWarehouse_id(),
7190 amar.kumar 977
				t_order.getPickupStoreId(),
7422 rajveer 978
				t_order.getFreebieItemId(),
8717 amar.kumar 979
				osource, 
13146 manish.sha 980
				new Long(t_order.getProductCondition().getValue()),
981
				t_order.getTransactionId());
982
		if(acceptTogetherOrdersMap!=null && acceptTogetherOrdersMap.size()>0){
983
			order.setAcceptTogetherOrdersMap(acceptTogetherOrdersMap);
984
		}
985
		if(billTogetherOrdersMap!=null && billTogetherOrdersMap.size()>0){
986
			order.setBillTogetherOrdersMap(billTogetherOrdersMap);
987
		}
988
		if(t_order.isSetLogisticsTransactionId()){
989
			order.setLogisticsTransactionId(t_order.getLogisticsTransactionId());
990
		}
19054 manish.sha 991
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
19032 manish.sha 992
		Date date = new Date(System.currentTimeMillis());
993
		long currentDateTime = 0;
19196 manish.sha 994
		long promisedShippingTime =0 ;
19032 manish.sha 995
		long currentTime = date.getTime();
19054 manish.sha 996
		try{
997
			currentDateTime = sdf.parse(sdf.format(date)).getTime();
19196 manish.sha 998
			promisedShippingTime = sdf.parse(sdf.format(new Date(order.getPromisedShippingTime()))).getTime();
19054 manish.sha 999
		}catch(Exception e){
1000
			e.printStackTrace();
1001
		}
19196 manish.sha 1002
		if(promisedShippingTime >0 && (order.getStatus()==3 || order.getStatus()==5 || order.getStatus()==41 ||
19058 manish.sha 1003
				order.getStatus()==35 || order.getStatus()==36 || order.getStatus()==37)){
19196 manish.sha 1004
			if(promisedShippingTime <= currentDateTime){
19050 manish.sha 1005
				if(loadVirtualWarehouseDetails().contains(order.getFulfilmentWarehouseId())){
19032 manish.sha 1006
					order.setAlert(OrderAlert.TODAY_SHIPPING_NOT_IN_STOCK);
1007
				}else{
1008
					order.setAlert(OrderAlert.TODAY_SHIPPING_IN_STOCK);
1009
				}
1010
			}else{
19162 manish.sha 1011
				if(!loadVirtualWarehouseDetails().contains(order.getFulfilmentWarehouseId())){
19164 manish.sha 1012
					order.setAlert(OrderAlert.LATER_SHIPPING_IN_STOCK);
19032 manish.sha 1013
				}
1014
			}
1015
		}
966 chandransh 1016
		return order;
671 chandransh 1017
	}
1018
 
2449 chandransh 1019
	/**
2697 chandransh 1020
	 * Queries the transction server to get the list of all return orders that
1021
	 * have to be processed.
1022
	 * 
1023
	 * @return A list of all return orders to be processed.
1024
	 */
1025
	public static List<ReturnOrder> getReturnOrders(long warehouseId){
1026
		List<ReturnOrder> retOrders = new ArrayList<ReturnOrder>();
1027
		try{
3132 rajveer 1028
			TransactionClient client = new TransactionClient();
2697 chandransh 1029
			Client c = client.getClient();
1030
			List<in.shop2020.model.v1.order.ReturnOrder> tRetOrders =  c.getReturnOrders(warehouseId, 0L, new Date().getTime());
1031
			for(in.shop2020.model.v1.order.ReturnOrder retOrder : tRetOrders){
1032
				retOrders.add(getReturnOrderFromThriftRO(retOrder));
1033
			}
1034
		}catch(Exception e){
1035
			e.printStackTrace();
1036
		}
1037
		return retOrders;
1038
	}
1039
 
2700 chandransh 1040
	public static ReturnOrder getReturnOrderFromThriftRO(in.shop2020.model.v1.order.ReturnOrder tRetOrder){
1041
		ReturnOrder retOrder = new ReturnOrder(tRetOrder.getOrderId(),
1042
				tRetOrder.getWarehouseId(),
1043
				tRetOrder.getItemId(),
1044
				tRetOrder.getProductGroup(),
1045
				tRetOrder.getBrand(),
1046
				tRetOrder.getModelName(),
1047
				tRetOrder.getModelNumber(),
1048
				tRetOrder.getColor(),
1049
				tRetOrder.getInvoiceNumber(),
1050
				tRetOrder.getJacketNumber(),
1051
				tRetOrder.getTotalPrice(),
1052
				tRetOrder.getTransferPrice(),
1053
				false,
1054
				tRetOrder.getCreatedAt());
2697 chandransh 1055
		return retOrder;
1056
	}
1057
 
1058
	/**
2449 chandransh 1059
	 * This method maps a given type to a list of statuses.
1060
	 * 
1061
	 * @param type
1062
	 *            The type of orders to fetch.
1063
	 * @return The list of Thrift statuses associated with a particular order
1064
	 *         type.
1065
	 */
4361 rajveer 1066
	public static List<OrderStatus> getStatuses(OrderType type) {
2449 chandransh 1067
		List<OrderStatus> statuses = new ArrayList<OrderStatus>();
1068
 
1069
		switch (type) {
1070
		case ACCEPTED:
1071
			statuses.add(OrderStatus.ACCEPTED);
1072
			break;
1073
 
4361 rajveer 1074
		case ALL_PENDING:
1075
			statuses.add(OrderStatus.SUBMITTED_FOR_PROCESSING);
4421 mandeep.dh 1076
			statuses.add(OrderStatus.CAPTURE_IN_PROCESS);
4361 rajveer 1077
			statuses.add(OrderStatus.INVENTORY_LOW);
1078
			statuses.add(OrderStatus.LOW_INV_PO_RAISED);
1079
			statuses.add(OrderStatus.LOW_INV_REVERSAL_IN_PROCESS);
1080
			statuses.add(OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT);
2449 chandransh 1081
			break;
1082
 
1083
		case NEW:
1084
			statuses.add(OrderStatus.SUBMITTED_FOR_PROCESSING);
4421 mandeep.dh 1085
			statuses.add(OrderStatus.CAPTURE_IN_PROCESS);
2449 chandransh 1086
			break;
1087
 
1088
		case BILLED:
1089
			statuses.add(OrderStatus.BILLED);
1090
			break;
1091
 
4308 rajveer 1092
		case LOW_INVENTORY:
2449 chandransh 1093
			statuses.add(OrderStatus.INVENTORY_LOW);
1094
			break;
4248 rajveer 1095
 
4308 rajveer 1096
		case PO_RAISED:
1097
			statuses.add(OrderStatus.LOW_INV_PO_RAISED);
1098
			break;
1099
 
1100
		case REVERSAL_INITIATED:
1101
			statuses.add(OrderStatus.LOW_INV_REVERSAL_IN_PROCESS);
1102
			break;
1103
 
1104
		case NOT_AVAILABLE:
1105
			statuses.add(OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT);
1106
			break;
1107
 
4248 rajveer 1108
		case CANCEL_CONFIRMED:
1109
			statuses.add(OrderStatus.CANCEL_REQUEST_CONFIRMED);
1110
			break;
2449 chandransh 1111
 
4459 rajveer 1112
		case DOA_REQUEST_AUTHORIZED:
1113
			statuses.add(OrderStatus.DOA_REQUEST_AUTHORIZED);
4515 mandeep.dh 1114
			statuses.add(OrderStatus.DOA_PICKUP_REQUEST_RAISED);
4459 rajveer 1115
			break;
1116
 
4666 rajveer 1117
		case LOST_IN_TRANSIT:
1118
			statuses.add(OrderStatus.LOST_IN_TRANSIT);
1119
			break;
1120
 
4459 rajveer 1121
		case DOA_LOST_IN_TRANSIT:
1122
			statuses.add(OrderStatus.DOA_LOST_IN_TRANSIT);
4478 rajveer 1123
			break;
1124
 
1125
		case DOA_RECEIVED_DAMAGED:
4459 rajveer 1126
			statuses.add(OrderStatus.DOA_RECEIVED_DAMAGED);
1127
			break;
4495 rajveer 1128
 
1129
		case RET_REQUEST_AUTHORIZED:
1130
			statuses.add(OrderStatus.RET_REQUEST_AUTHORIZED);
4515 mandeep.dh 1131
			statuses.add(OrderStatus.RET_PICKUP_REQUEST_RAISED);
4495 rajveer 1132
			break;
1133
 
1134
		case RET_AWAITED:
1135
			statuses.add(OrderStatus.RET_RETURN_IN_TRANSIT);
4515 mandeep.dh 1136
			statuses.add(OrderStatus.RET_PICKUP_CONFIRMED);
4495 rajveer 1137
			break;
4459 rajveer 1138
 
4495 rajveer 1139
		case RET_RECEIVED_PRESTINE:
1140
			statuses.add(OrderStatus.RET_RECEIVED_PRESTINE);
4515 mandeep.dh 1141
			statuses.add(OrderStatus.RET_PRODUCT_USABLE);
4495 rajveer 1142
			break;
1143
 
1144
		case RET_LOST_IN_TRANSIT:
1145
			statuses.add(OrderStatus.RET_LOST_IN_TRANSIT);
1146
			break;
1147
 
1148
		case RET_RECEIVED_DAMAGED:
1149
			statuses.add(OrderStatus.RET_RECEIVED_DAMAGED);
4515 mandeep.dh 1150
			statuses.add(OrderStatus.RET_PRODUCT_UNUSABLE);
4495 rajveer 1151
			break;
1152
 
2449 chandransh 1153
		case REJECTED:
1154
			statuses.add(OrderStatus.REJECTED);
1155
			break;
1156
 
1157
		case SHIPPED:
1158
			statuses.add(OrderStatus.SHIPPED_FROM_WH);
1159
			statuses.add(OrderStatus.SHIPPED_TO_LOGST);
5016 phani.kuma 1160
			statuses.add(OrderStatus.SHIPPED_TO_DESTINATION_CITY);
1161
			statuses.add(OrderStatus.REACHED_DESTINATION_CITY);
1162
			statuses.add(OrderStatus.FIRST_DELIVERY_ATTEMPT_MADE);
2449 chandransh 1163
			break;
1164
 
1165
		case DELIVERED:
1166
			statuses.add(OrderStatus.DELIVERY_SUCCESS);
4452 rajveer 1167
			statuses.add(OrderStatus.DOA_PICKUP_REQUEST_RAISED);
2449 chandransh 1168
			break;
2610 chandransh 1169
 
1170
		case DOA_AWAITED:
4452 rajveer 1171
			statuses.add(OrderStatus.DOA_PICKUP_CONFIRMED);
2610 chandransh 1172
			statuses.add(OrderStatus.DOA_RETURN_IN_TRANSIT);
4452 rajveer 1173
			statuses.add(OrderStatus.DOA_RECEIVED_PRESTINE);
2610 chandransh 1174
			break;
2449 chandransh 1175
 
4495 rajveer 1176
		case RTO_AWAITED:
4484 rajveer 1177
			statuses.add(OrderStatus.RTO_IN_TRANSIT);
2509 chandransh 1178
			break;
1179
 
4515 mandeep.dh 1180
        case RTO_RECEIVED_DAMAGED:
1181
            statuses.add(OrderStatus.RTO_RECEIVED_DAMAGED);
1182
            break;
1183
 
1184
        case DOA_RECEIVED_PRESTINE:
2610 chandransh 1185
			statuses.add(OrderStatus.DOA_CERT_VALID);
4515 mandeep.dh 1186
			statuses.add(OrderStatus.DOA_CERT_INVALID);
2610 chandransh 1187
			break;
1188
 
4495 rajveer 1189
		case RTO_RETURNED:
4484 rajveer 1190
			statuses.add(OrderStatus.RTO_RECEIVED_PRESTINE);
2509 chandransh 1191
			break;
1192
 
2628 chandransh 1193
		case RESHIPPED:
4484 rajveer 1194
			statuses.add(OrderStatus.RTO_RESHIPPED);
2628 chandransh 1195
			statuses.add(OrderStatus.DOA_INVALID_RESHIPPED);
4452 rajveer 1196
			statuses.add(OrderStatus.DOA_VALID_RESHIPPED);
2628 chandransh 1197
			break;
1198
 
1199
		case REFUNDED:
4682 rajveer 1200
		    statuses.add(OrderStatus.COD_VERIFICATION_FAILED);
4484 rajveer 1201
			statuses.add(OrderStatus.RTO_REFUNDED);
2628 chandransh 1202
			statuses.add(OrderStatus.DOA_INVALID_REFUNDED);
1203
			statuses.add(OrderStatus.DOA_VALID_REFUNDED);
4682 rajveer 1204
			statuses.add(OrderStatus.CANCELLED_DUE_TO_LOW_INVENTORY);
2628 chandransh 1205
			break;
2509 chandransh 1206
 
3065 chandransh 1207
		case VERIFICATION_PENDING:
4664 rajveer 1208
		    statuses.add(OrderStatus.COD_VERIFICATION_PENDING);
3065 chandransh 1209
		    break;
2449 chandransh 1210
		default:
1211
			break;
1212
		}
1213
		return statuses;
1214
	}
13146 manish.sha 1215
 
1216
	public static List<Long> getEligibleOrdersToBeAccepted(Order order){
1217
		List<Long> orders = new ArrayList<Long>();
1218
		try {
1219
 
1220
			TransactionClient client = new TransactionClient();
1221
			Client c = client.getClient();
1222
 
1223
			in.shop2020.model.v1.order.Order thriftOrder = c.getOrder(order.getOrderId());
1224
			long provider_id = thriftOrder.getLogistics_provider_id();
1225
			boolean cod = thriftOrder.isLogisticsCod();
1226
 
1227
			List<in.shop2020.model.v1.order.Order> torders = c.getOrdersForTransaction(thriftOrder.getTransactionId(), thriftOrder.getCustomer_id());
1228
			for(in.shop2020.model.v1.order.Order torder: torders){
1229
				if(torder.getLogistics_provider_id() == provider_id && torder.isLogisticsCod() == cod){
1230
					orders.add(torder.getId());
1231
				}
1232
			}
1233
 
1234
		}catch(Exception e){
1235
			e.printStackTrace();
1236
		}
1237
		return orders;
1238
	}
1239
 
1240
	public static String getItemDisplayName(LineItem lineitem){
1241
		StringBuffer itemName = new StringBuffer();
1242
        if (lineitem.getBrand() != null)
1243
            itemName.append(lineitem.getBrand() + " ");
1244
        if (lineitem.getModel_name() != null)
1245
            itemName.append(lineitem.getModel_name() + " ");
1246
        if (lineitem.getModel_number() != null)
1247
            itemName.append(lineitem.getModel_number() + " ");
1248
        if (lineitem.getColor() != null
1249
                && !lineitem.getColor().trim().equals("NA"))
1250
            itemName.append("(" + lineitem.getColor() + ")");
1251
 
1252
        return itemName.toString();
1253
	}
1254
 
1255
	public static String getProductName(in.shop2020.model.v1.catalog.Item item){
1256
		StringBuffer itemName = new StringBuffer();
1257
        if (item.getBrand() != null)
1258
            itemName.append(item.getBrand() + " ");
1259
        if (item.getModelName() != null)
1260
            itemName.append(item.getModelName() + " ");
1261
        if (item.getModelNumber() != null)
1262
            itemName.append(item.getModelNumber() + " ");
1263
        if (item.getColor() != null
1264
                && !item.getColor().trim().equals("NA"))
1265
            itemName.append("(" + item.getColor() + ")");
1266
 
1267
        return itemName.toString();
1268
	}
19050 manish.sha 1269
 
1270
	public static List<Long> loadVirtualWarehouseDetails(){
1271
		EhcacheWrapper<String, List<Long>> virtualWhCache = new EhcacheWrapper<String, List<Long>>(
1272
				"VirtualWarehouses", CacheManager.create());
1273
 
1274
		List<Long> virtualWarehouseIds = virtualWhCache.get("virtual_warehouses");
1275
 
1276
		if(virtualWarehouseIds!=null && virtualWarehouseIds.size()>0){
19052 manish.sha 1277
			System.out.println("Virtual Warehouse Exists");
1278
			logger.info("Virtual Warehouse Exists");
19050 manish.sha 1279
			return virtualWarehouseIds;
1280
		}else{
19052 manish.sha 1281
			System.out.println("Virtual Warehouse Not Exists");
1282
			logger.info("Virtual Warehouse Not Exists");
19050 manish.sha 1283
			virtualWarehouseIds = new ArrayList<Long>();
1284
			try{
1285
				in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = new InventoryClient().getClient();
1286
				List<Warehouse> allWarehouses = inventoryClient.getWarehouses(null, null, 0, 0, 0);
1287
				for(Warehouse wh:allWarehouses){
1288
					if(wh.getWarehouseType()==WarehouseType.THIRD_PARTY){
1289
						virtualWarehouseIds.add(wh.getId());
1290
					}
1291
				}
1292
			}catch(Exception e){
1293
				e.printStackTrace();
1294
			}
1295
			virtualWhCache.put("virtual_warehouses", virtualWarehouseIds);
1296
		}
1297
 
1298
		return virtualWarehouseIds;
1299
	}
493 rajveer 1300
}