Subversion Repositories SmartDukaan

Rev

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