Subversion Repositories SmartDukaan

Rev

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