Subversion Repositories SmartDukaan

Rev

Rev 19052 | Rev 19058 | 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;
493 rajveer 6
import in.shop2020.hotspot.dashbaord.shared.actions.OrderType;
2697 chandransh 7
import in.shop2020.hotspot.dashbaord.shared.actions.ReturnOrder;
5945 mandeep.dh 8
import in.shop2020.model.v1.inventory.InventoryType;
18100 manish.sha 9
import in.shop2020.model.v1.inventory.WarehouseType;
5110 mandeep.dh 10
import in.shop2020.model.v1.catalog.Item;
11
import in.shop2020.model.v1.catalog.ItemType;
5945 mandeep.dh 12
import in.shop2020.model.v1.inventory.Warehouse;
914 chandransh 13
import in.shop2020.model.v1.order.LineItem;
7422 rajveer 14
import in.shop2020.model.v1.order.OrderSource;
493 rajveer 15
import in.shop2020.model.v1.order.OrderStatus;
16
import in.shop2020.model.v1.order.TransactionService.Client;
19050 manish.sha 17
import in.shop2020.hotspot.dashbaord.server.EhcacheWrapper;
5110 mandeep.dh 18
import in.shop2020.thrift.clients.CatalogClient;
5948 mandeep.dh 19
import in.shop2020.thrift.clients.InventoryClient;
3132 rajveer 20
import in.shop2020.thrift.clients.TransactionClient;
13146 manish.sha 21
import in.shop2020.thrift.clients.LogisticsClient;
493 rajveer 22
 
4411 rajveer 23
import java.io.ByteArrayOutputStream;
24
import java.io.File;
25
import java.io.FileNotFoundException;
26
import java.io.FileOutputStream;
27
import java.io.IOException;
18938 manish.sha 28
import java.text.DecimalFormat;
29
import java.text.NumberFormat;
19054 manish.sha 30
import java.text.SimpleDateFormat;
493 rajveer 31
import java.util.ArrayList;
4411 rajveer 32
import java.util.Calendar;
19004 manish.sha 33
import java.util.Collections;
493 rajveer 34
import java.util.Date;
4411 rajveer 35
import java.util.GregorianCalendar;
36
import java.util.HashMap;
493 rajveer 37
import java.util.List;
4411 rajveer 38
import java.util.Map;
19004 manish.sha 39
import java.util.Map.Entry;
493 rajveer 40
 
19050 manish.sha 41
import net.sf.ehcache.CacheManager;
42
 
4411 rajveer 43
import org.slf4j.Logger;
44
import org.slf4j.LoggerFactory;
45
 
2449 chandransh 46
/**
47
 * This class is a facade to the Transaction service and should be used to
4133 chandransh 48
 * access all order specific data which requires some kind of transformation.
2449 chandransh 49
 * 
50
 * @author Chandranshu
51
 * 
52
 */
493 rajveer 53
public class TransactionUtils {
4411 rajveer 54
	private static String courierDetailsPath = "/CourierDetailReports";
55
	private static Logger logger = LoggerFactory.getLogger(TransactionUtils.class);
56
 
2449 chandransh 57
	/**
58
	 * The human user is concerned only with a consolidated view of actionable
59
	 * orders. Orders with different statuses in the database can be part of the
60
	 * same consolidated view. This method uses a mapping of <i>type</i> to
61
	 * <i>status</i> to get all such orders and return them as order beans.
62
	 * 
63
	 * @param type
64
	 *            The type of orders to return.
4133 chandransh 65
	 * @param offset
66
	 *            Offset to start from
67
	 * @param limit
68
	 *            No. of orders to return
2449 chandransh 69
	 * @param warehouseId
70
	 *            The warehouse for which the orders should be queried.
71
	 * @return A list of orders of the given type to be fulfilled from the given
72
	 *         warehouse
73
	 */
8303 amar.kumar 74
	public static List<Order> getOrders(OrderType type, long offset, long limit, long warehouseId, long source){
2449 chandransh 75
		List<OrderStatus> statuses = getStatuses(type);
493 rajveer 76
 
77
		List<Order> orders = new ArrayList<Order>();
78
		try{
4133 chandransh 79
			TransactionClient txnClient = new TransactionClient();
80
			Client client = txnClient.getClient();
493 rajveer 81
 
82
			List<in.shop2020.model.v1.order.Order> t_orders = new ArrayList<in.shop2020.model.v1.order.Order>();
19004 manish.sha 83
			if(type==OrderType.NEW || type==OrderType.ALL_PENDING || type ==OrderType.LOW_INVENTORY || type == OrderType.PO_RAISED
84
					|| type == OrderType.REVERSAL_INITIATED || type == OrderType.NOT_AVAILABLE){
85
				t_orders.addAll(client.getOrdersInBatchAsPromisedShipping(statuses, offset, limit, warehouseId, source));
86
			}else{
87
				t_orders.addAll(client.getOrdersInBatch(statuses, offset, limit, warehouseId, source));
88
			}
493 rajveer 89
 
90
			for (in.shop2020.model.v1.order.Order t_order: t_orders){
671 chandransh 91
				Order o = getOrderFromThriftOrder(t_order);
493 rajveer 92
				orders.add(o);
93
			}
19004 manish.sha 94
			if(type==OrderType.NEW || type==OrderType.ALL_PENDING || type ==OrderType.LOW_INVENTORY || type == OrderType.PO_RAISED
95
					|| type == OrderType.REVERSAL_INITIATED || type == OrderType.NOT_AVAILABLE){
96
				Map<Long, List<Order>> transactionOrdersMap = new HashMap<Long, List<Order>>();
97
				for(Order order : orders){
98
					if(transactionOrdersMap.containsKey(order.getTransactionId())){
99
						List<Order> txnOrders = transactionOrdersMap.get(order.getTransactionId());
100
						txnOrders.add(order);
101
						transactionOrdersMap.put(order.getTransactionId(), txnOrders);
102
					}else{
103
						List<Order> txnOrders = new ArrayList<Order>();
104
						txnOrders.add(order);
105
						transactionOrdersMap.put(order.getTransactionId(), txnOrders);
106
					}
107
				}
108
 
109
				orders = new ArrayList<Order>();
110
				for(Entry<Long, List<Order>> entry : transactionOrdersMap.entrySet()){
111
					List<Order> txnOrders = entry.getValue();
112
					Collections.sort(txnOrders,new OrderPromisedShippingComparator());
113
					transactionOrdersMap.put(entry.getKey(), txnOrders);
114
				}
115
 
116
				for(Entry<Long, List<Order>> entry : transactionOrdersMap.entrySet()){
117
					orders.addAll(entry.getValue());
118
				}
119
			}
120
 
493 rajveer 121
		}catch(Exception e){
2449 chandransh 122
			e.printStackTrace();
493 rajveer 123
		}
124
		return orders;
125
	}
126
 
2449 chandransh 127
	/**
4133 chandransh 128
	 * Wrapper around the method of same name in the transaction service. This
129
	 * method uses a mapping of <i>type</i> to <i>status</i> to get the count of
130
	 * all orders with a given status.
131
	 * 
132
	 * @param type
133
	 *            The type of orders to return.
134
	 * @param warehouseId
135
	 *            The warehouse for which the orders should be queried.
136
	 * @return The count of orders of the given type assigned to the given
137
	 *         warehouse.
138
	 */
8303 amar.kumar 139
	public static int getOrderCount(OrderType type, long warehouseId, long source){
4133 chandransh 140
		List<OrderStatus> statuses = getStatuses(type);
141
 
142
		int count = 0;
143
		try{
144
			TransactionClient txnClient = new TransactionClient();
145
			Client client = txnClient.getClient();
8303 amar.kumar 146
			count += client.getOrderCount(statuses, warehouseId, source);
4133 chandransh 147
		}catch(Exception e){
148
			e.printStackTrace();
149
		}
150
		return count;
151
	}
152
 
153
	/**
2449 chandransh 154
	 * Calls the same method of the transaction service and returns the status
155
	 * returned. Catches all exceptions that are raised and returns false in
156
	 * that case.
157
	 * 
158
	 * @param warehouseId
159
	 *            The warehouse for which the orders should be marked as
160
	 *            manifested.
161
	 * @param providerId
162
	 *            The provider for which the orders should be marked as
163
	 *            manifested.
3065 chandransh 164
	 * @param cod
165
	 *             Whether cod orders have to be marked as manifested
2449 chandransh 166
	 * @return True if everything goes fine, false otherwise.
167
	 */
5769 rajveer 168
	public static Map<Long, Long> getBilledOrders(long warehouseId, String providerId, boolean cod){
169
		Map<Long, Long> orders = new HashMap<Long, Long>();
760 chandransh 170
		try {
171
			long provider_id = Long.parseLong(providerId);
3132 rajveer 172
			TransactionClient client = new TransactionClient();
760 chandransh 173
			Client c = client.getClient();
4790 rajveer 174
 
175
			List<OrderStatus> statuses = new ArrayList<OrderStatus>();
176
			statuses.add(OrderStatus.BILLED);
8303 amar.kumar 177
			List<in.shop2020.model.v1.order.Order> torders = c.getOrdersInBatch(statuses, 0, 0, warehouseId, 0);
4790 rajveer 178
			for(in.shop2020.model.v1.order.Order torder: torders){
5556 rajveer 179
				if(torder.getLogistics_provider_id() == provider_id && torder.isLogisticsCod() == cod){
5769 rajveer 180
					orders.put(torder.getId(), torder.getPickupStoreId());
4790 rajveer 181
				}
4411 rajveer 182
			}
183
 
760 chandransh 184
		}catch(Exception e){
185
			e.printStackTrace();
186
		}
4790 rajveer 187
		return orders;
760 chandransh 188
	}
2449 chandransh 189
 
4790 rajveer 190
	public static boolean generateCourierDetailsFile(List<Long> orderIds, long providerId, long warehouseId, boolean isCod){
4411 rajveer 191
		Calendar date = new GregorianCalendar();
192
		int year = date.get(Calendar.YEAR);
193
		int month = date.get(Calendar.MONTH) +1;
194
		int day = date.get(Calendar.DAY_OF_MONTH);
195
 
196
		String fileNameSuffix = "-" + warehouseId + "-"+ providerId + "-" + year + "-" + month + "-" + day;
197
		if(isCod){
198
		    fileNameSuffix = "cod" + fileNameSuffix ;
199
		}
200
		else{
201
		    fileNameSuffix = "prepaid" + fileNameSuffix;
202
		}
203
 
204
		try {
4790 rajveer 205
			String fileName = courierDetailsPath + "/courier-details-" + fileNameSuffix + "-temp.xls";
4415 rajveer 206
			FileOutputStream f = new FileOutputStream(fileName);
4411 rajveer 207
			CourierDetailsGenerator courierDetailsGenerator = new CourierDetailsGenerator();
4790 rajveer 208
			ByteArrayOutputStream baosXLS = courierDetailsGenerator.generateCourierDetails(orderIds, warehouseId, providerId, isCod);
4411 rajveer 209
			baosXLS.writeTo(f);
210
			f.close();
211
		} catch (FileNotFoundException e) {
212
			logger.error("Unable to create the courier details file", e);
213
		} catch (IOException e) {
214
			logger.error("Unable to create the courier details file", e);
215
		}
216
 
217
		CourierDetailsReportMerger merger = new CourierDetailsReportMerger();
218
		try {
219
			Map<Long, String> warehouseIdFileNames = new HashMap<Long, String>();
4790 rajveer 220
			String fName;
221
			fName = courierDetailsPath + "/courier-details-" + fileNameSuffix + "-temp.xls";
222
			if((new File(fName)).exists()){
223
				warehouseIdFileNames.put(0L, fName);
4411 rajveer 224
			}
4790 rajveer 225
			fName = courierDetailsPath + "/courier-details-" + fileNameSuffix + ".xls";
226
			if((new File(fName)).exists()){
227
				warehouseIdFileNames.put(1L, fName);
4411 rajveer 228
			}
4790 rajveer 229
			ByteArrayOutputStream binXLS = merger.mergeCourierDetailsReports(warehouseIdFileNames);
230
			FileOutputStream f = new FileOutputStream(courierDetailsPath + "/courier-details-" + fileNameSuffix + ".xls");
4411 rajveer 231
			binXLS.writeTo(f);
232
			f.close();
4790 rajveer 233
			File tempFile = new File(courierDetailsPath + "/courier-details-" + fileNameSuffix + "-temp.xls");
234
			if(tempFile.exists()){
235
				tempFile.delete();
236
			}
4411 rajveer 237
		} catch (FileNotFoundException e) {
238
			logger.error("Error while creating the Courier Details report", e);
239
		} catch (IOException e) {
240
			logger.error("IO error while writing the Courier Details report", e);
241
		}
242
		return true;
243
	}
244
 
671 chandransh 245
	/**
2449 chandransh 246
	 * 
671 chandransh 247
	 * @param t_order
2449 chandransh 248
	 *            A thrift order object with line items.
249
	 * @return an Order bean which can be used for rendering on the client side.
671 chandransh 250
	 */
251
	public static Order getOrderFromThriftOrder(in.shop2020.model.v1.order.Order t_order) {
914 chandransh 252
		LineItem lineItem = t_order.getLineitems().get(0);
5110 mandeep.dh 253
		String pickFromWarehouse = null;
254
		Item item = null;
19004 manish.sha 255
		String warehouseType = "";
13146 manish.sha 256
 
257
	    Map<Long, Map<String, String>> acceptTogetherOrdersMap = null;
258
	    Map<Long, Map<String, String>> billTogetherOrdersMap = null;
5110 mandeep.dh 259
 
260
        try {
5945 mandeep.dh 261
            in.shop2020.model.v1.catalog.CatalogService.Client client = new CatalogClient().getClient();
5948 mandeep.dh 262
            in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = new InventoryClient().getClient();
5110 mandeep.dh 263
            item = client.getItem(lineItem.getItem_id());
264
            pickFromWarehouse = CatalogUtils.getWarehousesForBillingWarehouse(t_order.getWarehouse_id())
265
                                    .get(t_order.getFulfilmentWarehouseId());
266
 
267
            if (pickFromWarehouse == null) {
5948 mandeep.dh 268
                Warehouse warehouse = inventoryClient.getWarehouse(t_order.getFulfilmentWarehouseId());
269
                pickFromWarehouse = inventoryClient.getWarehouses(null, InventoryType.GOOD, warehouse.getVendor().getId(), t_order.getWarehouse_id(), 0).get(0).getDisplayName();
13146 manish.sha 270
            }											
271
            if(!t_order.isSetAccepted_timestamp()){
272
            	acceptTogetherOrdersMap = new HashMap<Long, Map<String, String>>();
273
            	Map<String, String> orderValuesMap = new HashMap<String, String>();
274
            	orderValuesMap.put("ProductName", getItemDisplayName(lineItem));
275
				orderValuesMap.put("Quantity", lineItem.getQuantity()+"");
18100 manish.sha 276
				if(!inventoryClient.isAlive()){
277
					inventoryClient = new InventoryClient().getClient();
278
				}
279
				Warehouse fulfillmentWarehouse = inventoryClient.getWarehouse(t_order.getFulfilmentWarehouseId());
19004 manish.sha 280
				warehouseType = fulfillmentWarehouse.getWarehouseType().toString();
18100 manish.sha 281
				orderValuesMap.put("WarehouseType", fulfillmentWarehouse.getWarehouseType().toString());
19054 manish.sha 282
				SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy");
18938 manish.sha 283
				orderValuesMap.put("Promised_Shipping", sdf.format(new Date(t_order.getPromised_shipping_time())));
18964 manish.sha 284
				NumberFormat formatter = new DecimalFormat("#0.000");     
285
				orderValuesMap.put("Weight", formatter.format(t_order.getLineitems().get(0).getUnit_weight()));
286
				formatter = new DecimalFormat("#0.00");   
18938 manish.sha 287
				orderValuesMap.put("UnitPrice", formatter.format(t_order.getLineitems().get(0).getUnit_price()));
18964 manish.sha 288
				orderValuesMap.put("PackQuantity", item.getPackQuantity()+"");
13146 manish.sha 289
				acceptTogetherOrdersMap.put(t_order.getId(), orderValuesMap);
290
            	List<in.shop2020.model.v1.order.Order> taOrders = new TransactionClient().getClient().getOrdersForTransaction(t_order.getTransactionId(), t_order.getCustomer_id());
291
            	in.shop2020.logistics.Provider provider = new LogisticsClient().getClient().getProvider(t_order.getLogistics_provider_id());
292
            	for(in.shop2020.model.v1.order.Order taOrder : taOrders){
293
            		LineItem lineItem1 = taOrder.getLineitems().get(0);
294
            		if(t_order.getId()==taOrder.getId()){
295
            			continue;
13156 manish.sha 296
            		}
297
            		else if(taOrder.getSource()!=OrderSource.WEBSITE.getValue()){
298
            			continue;
299
            		}
300
            		else{
13146 manish.sha 301
            			orderValuesMap = new HashMap<String, String>();
13323 manish.sha 302
            			if(provider.isGroupShipmentAllowed() && !taOrder.isSetAccepted_timestamp() && t_order.getStatus()==taOrder.getStatus() 
303
            					&& taOrder.getLogistics_provider_id()==t_order.getLogistics_provider_id() 
304
            					&& taOrder.isLogisticsCod()==t_order.isLogisticsCod() && taOrder.getWarehouse_id() == t_order.getWarehouse_id() 
305
            					&& taOrder.getOrderType() == t_order.getOrderType() && taOrder.getPickupStoreId() == t_order.getPickupStoreId()){
13146 manish.sha 306
            				orderValuesMap.put("ProductName", getItemDisplayName(lineItem1));
307
            				orderValuesMap.put("Quantity", lineItem1.getQuantity()+"");
18100 manish.sha 308
            				if(!inventoryClient.isAlive()){
309
            					inventoryClient = new InventoryClient().getClient();
310
            				}
311
            				fulfillmentWarehouse = inventoryClient.getWarehouse(taOrder.getFulfilmentWarehouseId());
312
            				orderValuesMap.put("WarehouseType", fulfillmentWarehouse.getWarehouseType().toString());
18938 manish.sha 313
            				orderValuesMap.put("Promised_Shipping", sdf.format(new Date(taOrder.getPromised_shipping_time())));
314
            				orderValuesMap.put("UnitPrice", formatter.format(taOrder.getLineitems().get(0).getUnit_price()));
18964 manish.sha 315
            				formatter = new DecimalFormat("#0.000");   
316
            				orderValuesMap.put("Weight", formatter.format(taOrder.getLineitems().get(0).getUnit_weight()));
317
            				Item orderItem = client.getItem(taOrder.getLineitems().get(0).getItem_id());
318
            				orderValuesMap.put("PackQuantity", orderItem.getPackQuantity()+"");
13146 manish.sha 319
            			}
320
            			if(orderValuesMap!=null && orderValuesMap.size()>0){
321
            				acceptTogetherOrdersMap.put(taOrder.getId(), orderValuesMap);
322
            			}
323
            		}
324
            	}
5110 mandeep.dh 325
            }
13146 manish.sha 326
 
327
            if(t_order.isSetLogisticsTransactionId()){
328
            	billTogetherOrdersMap = new HashMap<Long, Map<String, String>>();
329
            	Map<String, String> orderValuesMap = new HashMap<String, String>();
18100 manish.sha 330
	            if(t_order.getStatus()==OrderStatus.ACCEPTED){
331
	            	orderValuesMap.put("ProductName", getItemDisplayName(lineItem));
332
	            	orderValuesMap.put("Quantity", lineItem.getQuantity()+"");
333
	            	if(ItemType.SERIALIZED==item.getType()){
334
	            		orderValuesMap.put("IsSerialized", "true");
335
	            	}else{
336
	            		orderValuesMap.put("IsSerialized", "false");
337
	            	}
338
	            	if(t_order.isSetFreebieItemId() && t_order.getFreebieItemId()!=0){
339
	            		orderValuesMap.put("IsFreebie", "true");
340
	            	} else {
341
	            		orderValuesMap.put("IsFreebie", "false");
342
	            	}
343
	            	billTogetherOrdersMap.put(t_order.getId(), orderValuesMap);
13146 manish.sha 344
            	}
345
            	Map<Long, Item> orderItemMap = new HashMap<Long, Item>();
346
            	List<in.shop2020.model.v1.order.Order> taOrders = new TransactionClient().getClient().getGroupOrdersByLogisticsTxnId(t_order.getLogisticsTransactionId());
347
            	for(in.shop2020.model.v1.order.Order ord1: taOrders){
18100 manish.sha 348
            		if(ord1.getStatus()==OrderStatus.ACCEPTED){
349
	            		if(ord1.getId()== t_order.getId()){
350
	            			orderItemMap.put(ord1.getId(), item);
351
	            		} else {
352
		            		if(!client.isAlive()){
353
		            			client = new CatalogClient().getClient();
354
		            		}
355
		            		Item it = client.getItem(ord1.getLineitems().get(0).getItem_id());
356
		            		orderItemMap.put(ord1.getId(), it);
13146 manish.sha 357
	            		}
358
            		}
359
            	}
360
 
361
            	for(in.shop2020.model.v1.order.Order taOrder: taOrders){
18100 manish.sha 362
            		if(taOrder.getStatus()==OrderStatus.ACCEPTED){
363
	            		if(taOrder.getId()==t_order.getId()){
364
	            			continue;
365
	            		} else {
366
	            			orderValuesMap = new HashMap<String, String>();
367
	            			Item orderItem = orderItemMap.get(taOrder.getId());
368
	            			orderValuesMap.put("ProductName", getProductName(orderItem));
369
	                    	orderValuesMap.put("Quantity", taOrder.getLineitems().get(0).getQuantity()+"");
370
	                    	if(ItemType.SERIALIZED==orderItem.getType()){
371
	                    		orderValuesMap.put("IsSerialized", "true");
372
	                    	}else{
373
	                    		orderValuesMap.put("IsSerialized", "false");
374
	                    	}
375
	                    	if(taOrder.isSetFreebieItemId() && taOrder.getFreebieItemId()!=0){
376
	                    		orderValuesMap.put("IsFreebie", "true");
377
	                    	} else {
378
	                    		orderValuesMap.put("IsFreebie", "false");
379
	                    	}
380
	                    	billTogetherOrdersMap.put(taOrder.getId(), orderValuesMap);
381
	            		}
13146 manish.sha 382
            		}
383
            	}
384
            }
385
            else{
386
            	billTogetherOrdersMap = new HashMap<Long, Map<String, String>>();
387
            	Map<String, String> orderValuesMap = new HashMap<String, String>();
388
            	orderValuesMap.put("ProductName", getItemDisplayName(lineItem));
389
            	orderValuesMap.put("Quantity", lineItem.getQuantity()+"");
390
            	if(ItemType.SERIALIZED==item.getType()){
391
            		orderValuesMap.put("IsSerialized", "true");
392
            	}else{
393
            		orderValuesMap.put("IsSerialized", "false");
394
            	}
395
            	if(t_order.isSetFreebieItemId() && t_order.getFreebieItemId()!=0){
396
            		orderValuesMap.put("IsFreebie", "true");
397
            	} else {
398
            		orderValuesMap.put("IsFreebie", "false");
399
            	}
400
            	billTogetherOrdersMap.put(t_order.getId(), orderValuesMap);
401
            }
5110 mandeep.dh 402
		}
403
        catch (Exception e) {
404
            logger.error("Error looking up warehouse: " + t_order.getVendorId(), e);
405
        }
406
 
3553 chandransh 407
		String delayReason = null;
408
		if(t_order.getDelayReason() != null)
7433 rajveer 409
		    delayReason = t_order.getDelayReason().name();
3553 chandransh 410
 
7556 rajveer 411
		String osource = OrderSource.findByValue((int)t_order.getSource()).toString();
7433 rajveer 412
 
966 chandransh 413
		Order order = new Order(t_order.getId(),
414
				t_order.getCustomer_id(),
415
				t_order.getCustomer_name(),
416
				t_order.getCustomer_mobilenumber(),
417
				t_order.getCustomer_pincode(),
418
				t_order.getCustomer_address1(),
419
				t_order.getCustomer_address2(),
420
				t_order.getCustomer_city(),
421
				t_order.getCustomer_state(),
422
				t_order.getCustomer_email(),
423
				t_order.getCreated_timestamp(),
4004 chandransh 424
				t_order.getShipping_timestamp(),
425
				t_order.getVerification_timestamp(),
966 chandransh 426
				t_order.getExpected_delivery_time(),
3994 chandransh 427
				t_order.getPromised_delivery_time(),
4004 chandransh 428
				t_order.getExpected_shipping_time(),
4666 rajveer 429
				t_order.getPromised_shipping_time(),
966 chandransh 430
				t_order.getStatus().getValue(),
431
				t_order.getStatusDescription(),
5527 anupam.sin 432
				t_order.getOrderType().name(),
966 chandransh 433
				lineItem.getItem_id(),
434
				lineItem.getProductGroup(),
435
				lineItem.getBrand(),
436
				lineItem.getModel_name(),
437
				lineItem.getModel_number(),
438
				lineItem.getColor(),
439
				lineItem.getExtra_info(),
4172 rajveer 440
				lineItem.getDealText(),
5387 rajveer 441
				lineItem.getQuantity(),
2782 chandransh 442
				t_order.getTotal_amount(),
443
				t_order.getTotal_weight(),
444
				t_order.getAirwaybill_no(),
445
				t_order.getBilled_by(),
446
				t_order.getInvoice_number(),
447
				t_order.getJacket_number(),
448
				lineItem.getItem_number(),
4659 mandeep.dh 449
				lineItem.getSerial_number(),
3065 chandransh 450
				t_order.getBatchNo(),
451
				t_order.getSerialNo(),
2509 chandransh 452
				t_order.isDoaFlag(),
3065 chandransh 453
				t_order.getPickupRequestNo(),
5556 rajveer 454
				t_order.isLogisticsCod(),
5110 mandeep.dh 455
				delayReason,
456
				pickFromWarehouse,
6028 rajveer 457
				ItemType.SERIALIZED.equals(item.getType()),
458
				item.isHasItemNo(),
5769 rajveer 459
				t_order.getFulfilmentWarehouseId(),
9263 amar.kumar 460
				t_order.getWarehouse_id(),
7190 amar.kumar 461
				t_order.getPickupStoreId(),
7422 rajveer 462
				t_order.getFreebieItemId(),
8717 amar.kumar 463
				osource, 
13146 manish.sha 464
				new Long(t_order.getProductCondition().getValue()),
465
				t_order.getTransactionId());
466
		if(acceptTogetherOrdersMap!=null && acceptTogetherOrdersMap.size()>0){
467
			order.setAcceptTogetherOrdersMap(acceptTogetherOrdersMap);
468
		}
469
		if(billTogetherOrdersMap!=null && billTogetherOrdersMap.size()>0){
470
			order.setBillTogetherOrdersMap(billTogetherOrdersMap);
471
		}
472
		if(t_order.isSetLogisticsTransactionId()){
473
			order.setLogisticsTransactionId(t_order.getLogisticsTransactionId());
474
		}
19054 manish.sha 475
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
19032 manish.sha 476
		Date date = new Date(System.currentTimeMillis());
477
		long currentDateTime = 0;
478
		long expectedDateShippingTime =0 ;
479
		long currentTime = date.getTime();
19054 manish.sha 480
		try{
481
			currentDateTime = sdf.parse(sdf.format(date)).getTime();
482
			expectedDateShippingTime = sdf.parse(sdf.format(new Date(order.getExpectedShippingTime()))).getTime();
483
		}catch(Exception e){
484
			e.printStackTrace();
485
		}
19032 manish.sha 486
		if(expectedDateShippingTime >0 && order.getStatus() < 9){
487
			if(expectedDateShippingTime <= currentDateTime){
19050 manish.sha 488
				if(loadVirtualWarehouseDetails().contains(order.getFulfilmentWarehouseId())){
19032 manish.sha 489
					order.setAlert(OrderAlert.TODAY_SHIPPING_NOT_IN_STOCK);
490
				}else{
491
					order.setAlert(OrderAlert.TODAY_SHIPPING_IN_STOCK);
492
				}
493
			}else{
494
				if(order.getExpectedShippingTime() <= currentTime){
495
					order.setAlert(OrderAlert.SHIPPING_TIME_EXCEEDED);
496
				}else{
497
					order.setAlert(OrderAlert.LATER_SHIPPING);
498
				}
499
			}
500
		}
966 chandransh 501
		return order;
671 chandransh 502
	}
503
 
2449 chandransh 504
	/**
2697 chandransh 505
	 * Queries the transction server to get the list of all return orders that
506
	 * have to be processed.
507
	 * 
508
	 * @return A list of all return orders to be processed.
509
	 */
510
	public static List<ReturnOrder> getReturnOrders(long warehouseId){
511
		List<ReturnOrder> retOrders = new ArrayList<ReturnOrder>();
512
		try{
3132 rajveer 513
			TransactionClient client = new TransactionClient();
2697 chandransh 514
			Client c = client.getClient();
515
			List<in.shop2020.model.v1.order.ReturnOrder> tRetOrders =  c.getReturnOrders(warehouseId, 0L, new Date().getTime());
516
			for(in.shop2020.model.v1.order.ReturnOrder retOrder : tRetOrders){
517
				retOrders.add(getReturnOrderFromThriftRO(retOrder));
518
			}
519
		}catch(Exception e){
520
			e.printStackTrace();
521
		}
522
		return retOrders;
523
	}
524
 
2700 chandransh 525
	public static ReturnOrder getReturnOrderFromThriftRO(in.shop2020.model.v1.order.ReturnOrder tRetOrder){
526
		ReturnOrder retOrder = new ReturnOrder(tRetOrder.getOrderId(),
527
				tRetOrder.getWarehouseId(),
528
				tRetOrder.getItemId(),
529
				tRetOrder.getProductGroup(),
530
				tRetOrder.getBrand(),
531
				tRetOrder.getModelName(),
532
				tRetOrder.getModelNumber(),
533
				tRetOrder.getColor(),
534
				tRetOrder.getInvoiceNumber(),
535
				tRetOrder.getJacketNumber(),
536
				tRetOrder.getTotalPrice(),
537
				tRetOrder.getTransferPrice(),
538
				false,
539
				tRetOrder.getCreatedAt());
2697 chandransh 540
		return retOrder;
541
	}
542
 
543
	/**
2449 chandransh 544
	 * This method maps a given type to a list of statuses.
545
	 * 
546
	 * @param type
547
	 *            The type of orders to fetch.
548
	 * @return The list of Thrift statuses associated with a particular order
549
	 *         type.
550
	 */
4361 rajveer 551
	public static List<OrderStatus> getStatuses(OrderType type) {
2449 chandransh 552
		List<OrderStatus> statuses = new ArrayList<OrderStatus>();
553
 
554
		switch (type) {
555
		case ACCEPTED:
556
			statuses.add(OrderStatus.ACCEPTED);
557
			break;
558
 
4361 rajveer 559
		case ALL_PENDING:
560
			statuses.add(OrderStatus.SUBMITTED_FOR_PROCESSING);
4421 mandeep.dh 561
			statuses.add(OrderStatus.CAPTURE_IN_PROCESS);
4361 rajveer 562
			statuses.add(OrderStatus.INVENTORY_LOW);
563
			statuses.add(OrderStatus.LOW_INV_PO_RAISED);
564
			statuses.add(OrderStatus.LOW_INV_REVERSAL_IN_PROCESS);
565
			statuses.add(OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT);
2449 chandransh 566
			break;
567
 
568
		case NEW:
569
			statuses.add(OrderStatus.SUBMITTED_FOR_PROCESSING);
4421 mandeep.dh 570
			statuses.add(OrderStatus.CAPTURE_IN_PROCESS);
2449 chandransh 571
			break;
572
 
573
		case BILLED:
574
			statuses.add(OrderStatus.BILLED);
575
			break;
576
 
4308 rajveer 577
		case LOW_INVENTORY:
2449 chandransh 578
			statuses.add(OrderStatus.INVENTORY_LOW);
579
			break;
4248 rajveer 580
 
4308 rajveer 581
		case PO_RAISED:
582
			statuses.add(OrderStatus.LOW_INV_PO_RAISED);
583
			break;
584
 
585
		case REVERSAL_INITIATED:
586
			statuses.add(OrderStatus.LOW_INV_REVERSAL_IN_PROCESS);
587
			break;
588
 
589
		case NOT_AVAILABLE:
590
			statuses.add(OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT);
591
			break;
592
 
4248 rajveer 593
		case CANCEL_CONFIRMED:
594
			statuses.add(OrderStatus.CANCEL_REQUEST_CONFIRMED);
595
			break;
2449 chandransh 596
 
4459 rajveer 597
		case DOA_REQUEST_AUTHORIZED:
598
			statuses.add(OrderStatus.DOA_REQUEST_AUTHORIZED);
4515 mandeep.dh 599
			statuses.add(OrderStatus.DOA_PICKUP_REQUEST_RAISED);
4459 rajveer 600
			break;
601
 
4666 rajveer 602
		case LOST_IN_TRANSIT:
603
			statuses.add(OrderStatus.LOST_IN_TRANSIT);
604
			break;
605
 
4459 rajveer 606
		case DOA_LOST_IN_TRANSIT:
607
			statuses.add(OrderStatus.DOA_LOST_IN_TRANSIT);
4478 rajveer 608
			break;
609
 
610
		case DOA_RECEIVED_DAMAGED:
4459 rajveer 611
			statuses.add(OrderStatus.DOA_RECEIVED_DAMAGED);
612
			break;
4495 rajveer 613
 
614
		case RET_REQUEST_AUTHORIZED:
615
			statuses.add(OrderStatus.RET_REQUEST_AUTHORIZED);
4515 mandeep.dh 616
			statuses.add(OrderStatus.RET_PICKUP_REQUEST_RAISED);
4495 rajveer 617
			break;
618
 
619
		case RET_AWAITED:
620
			statuses.add(OrderStatus.RET_RETURN_IN_TRANSIT);
4515 mandeep.dh 621
			statuses.add(OrderStatus.RET_PICKUP_CONFIRMED);
4495 rajveer 622
			break;
4459 rajveer 623
 
4495 rajveer 624
		case RET_RECEIVED_PRESTINE:
625
			statuses.add(OrderStatus.RET_RECEIVED_PRESTINE);
4515 mandeep.dh 626
			statuses.add(OrderStatus.RET_PRODUCT_USABLE);
4495 rajveer 627
			break;
628
 
629
		case RET_LOST_IN_TRANSIT:
630
			statuses.add(OrderStatus.RET_LOST_IN_TRANSIT);
631
			break;
632
 
633
		case RET_RECEIVED_DAMAGED:
634
			statuses.add(OrderStatus.RET_RECEIVED_DAMAGED);
4515 mandeep.dh 635
			statuses.add(OrderStatus.RET_PRODUCT_UNUSABLE);
4495 rajveer 636
			break;
637
 
2449 chandransh 638
		case REJECTED:
639
			statuses.add(OrderStatus.REJECTED);
640
			break;
641
 
642
		case SHIPPED:
643
			statuses.add(OrderStatus.SHIPPED_FROM_WH);
644
			statuses.add(OrderStatus.SHIPPED_TO_LOGST);
5016 phani.kuma 645
			statuses.add(OrderStatus.SHIPPED_TO_DESTINATION_CITY);
646
			statuses.add(OrderStatus.REACHED_DESTINATION_CITY);
647
			statuses.add(OrderStatus.FIRST_DELIVERY_ATTEMPT_MADE);
2449 chandransh 648
			break;
649
 
650
		case DELIVERED:
651
			statuses.add(OrderStatus.DELIVERY_SUCCESS);
4452 rajveer 652
			statuses.add(OrderStatus.DOA_PICKUP_REQUEST_RAISED);
2449 chandransh 653
			break;
2610 chandransh 654
 
655
		case DOA_AWAITED:
4452 rajveer 656
			statuses.add(OrderStatus.DOA_PICKUP_CONFIRMED);
2610 chandransh 657
			statuses.add(OrderStatus.DOA_RETURN_IN_TRANSIT);
4452 rajveer 658
			statuses.add(OrderStatus.DOA_RECEIVED_PRESTINE);
2610 chandransh 659
			break;
2449 chandransh 660
 
4495 rajveer 661
		case RTO_AWAITED:
4484 rajveer 662
			statuses.add(OrderStatus.RTO_IN_TRANSIT);
2509 chandransh 663
			break;
664
 
4515 mandeep.dh 665
        case RTO_RECEIVED_DAMAGED:
666
            statuses.add(OrderStatus.RTO_RECEIVED_DAMAGED);
667
            break;
668
 
669
        case DOA_RECEIVED_PRESTINE:
2610 chandransh 670
			statuses.add(OrderStatus.DOA_CERT_VALID);
4515 mandeep.dh 671
			statuses.add(OrderStatus.DOA_CERT_INVALID);
2610 chandransh 672
			break;
673
 
4495 rajveer 674
		case RTO_RETURNED:
4484 rajveer 675
			statuses.add(OrderStatus.RTO_RECEIVED_PRESTINE);
2509 chandransh 676
			break;
677
 
2628 chandransh 678
		case RESHIPPED:
4484 rajveer 679
			statuses.add(OrderStatus.RTO_RESHIPPED);
2628 chandransh 680
			statuses.add(OrderStatus.DOA_INVALID_RESHIPPED);
4452 rajveer 681
			statuses.add(OrderStatus.DOA_VALID_RESHIPPED);
2628 chandransh 682
			break;
683
 
684
		case REFUNDED:
4682 rajveer 685
		    statuses.add(OrderStatus.COD_VERIFICATION_FAILED);
4484 rajveer 686
			statuses.add(OrderStatus.RTO_REFUNDED);
2628 chandransh 687
			statuses.add(OrderStatus.DOA_INVALID_REFUNDED);
688
			statuses.add(OrderStatus.DOA_VALID_REFUNDED);
4682 rajveer 689
			statuses.add(OrderStatus.CANCELLED_DUE_TO_LOW_INVENTORY);
2628 chandransh 690
			break;
2509 chandransh 691
 
3065 chandransh 692
		case VERIFICATION_PENDING:
4664 rajveer 693
		    statuses.add(OrderStatus.COD_VERIFICATION_PENDING);
3065 chandransh 694
		    break;
2449 chandransh 695
		default:
696
			break;
697
		}
698
		return statuses;
699
	}
13146 manish.sha 700
 
701
	public static List<Long> getEligibleOrdersToBeAccepted(Order order){
702
		List<Long> orders = new ArrayList<Long>();
703
		try {
704
 
705
			TransactionClient client = new TransactionClient();
706
			Client c = client.getClient();
707
 
708
			in.shop2020.model.v1.order.Order thriftOrder = c.getOrder(order.getOrderId());
709
			long provider_id = thriftOrder.getLogistics_provider_id();
710
			boolean cod = thriftOrder.isLogisticsCod();
711
 
712
			List<in.shop2020.model.v1.order.Order> torders = c.getOrdersForTransaction(thriftOrder.getTransactionId(), thriftOrder.getCustomer_id());
713
			for(in.shop2020.model.v1.order.Order torder: torders){
714
				if(torder.getLogistics_provider_id() == provider_id && torder.isLogisticsCod() == cod){
715
					orders.add(torder.getId());
716
				}
717
			}
718
 
719
		}catch(Exception e){
720
			e.printStackTrace();
721
		}
722
		return orders;
723
	}
724
 
725
	public static String getItemDisplayName(LineItem lineitem){
726
		StringBuffer itemName = new StringBuffer();
727
        if (lineitem.getBrand() != null)
728
            itemName.append(lineitem.getBrand() + " ");
729
        if (lineitem.getModel_name() != null)
730
            itemName.append(lineitem.getModel_name() + " ");
731
        if (lineitem.getModel_number() != null)
732
            itemName.append(lineitem.getModel_number() + " ");
733
        if (lineitem.getColor() != null
734
                && !lineitem.getColor().trim().equals("NA"))
735
            itemName.append("(" + lineitem.getColor() + ")");
736
 
737
        return itemName.toString();
738
	}
739
 
740
	public static String getProductName(in.shop2020.model.v1.catalog.Item item){
741
		StringBuffer itemName = new StringBuffer();
742
        if (item.getBrand() != null)
743
            itemName.append(item.getBrand() + " ");
744
        if (item.getModelName() != null)
745
            itemName.append(item.getModelName() + " ");
746
        if (item.getModelNumber() != null)
747
            itemName.append(item.getModelNumber() + " ");
748
        if (item.getColor() != null
749
                && !item.getColor().trim().equals("NA"))
750
            itemName.append("(" + item.getColor() + ")");
751
 
752
        return itemName.toString();
753
	}
19050 manish.sha 754
 
755
	public static List<Long> loadVirtualWarehouseDetails(){
756
		EhcacheWrapper<String, List<Long>> virtualWhCache = new EhcacheWrapper<String, List<Long>>(
757
				"VirtualWarehouses", CacheManager.create());
758
 
759
		List<Long> virtualWarehouseIds = virtualWhCache.get("virtual_warehouses");
760
 
761
		if(virtualWarehouseIds!=null && virtualWarehouseIds.size()>0){
19052 manish.sha 762
			System.out.println("Virtual Warehouse Exists");
763
			logger.info("Virtual Warehouse Exists");
19050 manish.sha 764
			return virtualWarehouseIds;
765
		}else{
19052 manish.sha 766
			System.out.println("Virtual Warehouse Not Exists");
767
			logger.info("Virtual Warehouse Not Exists");
19050 manish.sha 768
			virtualWarehouseIds = new ArrayList<Long>();
769
			try{
770
				in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = new InventoryClient().getClient();
771
				List<Warehouse> allWarehouses = inventoryClient.getWarehouses(null, null, 0, 0, 0);
772
				for(Warehouse wh:allWarehouses){
773
					if(wh.getWarehouseType()==WarehouseType.THIRD_PARTY){
774
						virtualWarehouseIds.add(wh.getId());
775
					}
776
				}
777
			}catch(Exception e){
778
				e.printStackTrace();
779
			}
780
			virtualWhCache.put("virtual_warehouses", virtualWarehouseIds);
781
		}
782
 
783
		return virtualWarehouseIds;
784
	}
493 rajveer 785
}