Subversion Repositories SmartDukaan

Rev

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