Subversion Repositories SmartDukaan

Rev

Rev 10484 | Rev 11713 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1961 ankur.sing 1
package in.shop2020.catalog.dashboard.server;
2
 
3
import in.shop2020.catalog.dashboard.client.CatalogService;
6530 vikram.rag 4
 
7190 amar.kumar 5
import in.shop2020.catalog.dashboard.shared.FreebieItem;
1961 ankur.sing 6
import in.shop2020.catalog.dashboard.shared.Item;
4431 phani.kuma 7
import in.shop2020.catalog.dashboard.shared.ItemInventory;
3850 chandransh 8
import in.shop2020.catalog.dashboard.shared.ItemStatus;
2068 ankur.sing 9
import in.shop2020.catalog.dashboard.shared.ItemsComparator;
3558 rajveer 10
import in.shop2020.catalog.dashboard.shared.SourcePricings;
2119 ankur.sing 11
import in.shop2020.catalog.dashboard.shared.VendorItemMapping;
12
import in.shop2020.catalog.dashboard.shared.VendorPricings;
5504 phani.kuma 13
import in.shop2020.catalog.dashboard.shared.VoucherItemMapping;
2378 ankur.sing 14
import in.shop2020.config.ConfigException;
3907 chandransh 15
import in.shop2020.content.ContentService;
16
import in.shop2020.content.ContentServiceException;
5946 rajveer 17
import in.shop2020.model.v1.catalog.CatalogService.Client;
10484 vikram.rag 18
import in.shop2020.model.v1.catalog.CatalogServiceException;
6838 vikram.rag 19
import in.shop2020.model.v1.catalog.Insurer;
5706 amit.gupta 20
import in.shop2020.model.v1.catalog.ItemType;
11671 vikram.rag 21
import in.shop2020.model.v1.catalog.PrivateDeal;
2105 ankur.sing 22
import in.shop2020.model.v1.catalog.status;
6096 amit.gupta 23
import in.shop2020.model.v1.inventory.InventoryService;
6813 amar.kumar 24
import in.shop2020.model.v1.inventory.ItemStockPurchaseParams;
9687 rajveer 25
import in.shop2020.model.v1.inventory.OOSStatus;
5504 phani.kuma 26
import in.shop2020.model.v1.user.VoucherType;
3129 rajveer 27
import in.shop2020.thrift.clients.CatalogClient;
3907 chandransh 28
import in.shop2020.thrift.clients.ContentClient;
5946 rajveer 29
import in.shop2020.thrift.clients.InventoryClient;
2378 ankur.sing 30
import in.shop2020.thrift.clients.config.ConfigClient;
2119 ankur.sing 31
import in.shop2020.utils.CategoryManager;
2359 ankur.sing 32
import in.shop2020.utils.ConfigClientKeys;
6530 vikram.rag 33
import in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems;
34
import in.shop2020.catalog.dashboard.shared.ItemWarehouse;
2427 ankur.sing 35
import java.io.BufferedReader;
36
import java.io.FileReader;
2359 ankur.sing 37
import java.io.IOException;
2427 ankur.sing 38
import java.text.DateFormat;
39
import java.text.SimpleDateFormat;
1961 ankur.sing 40
import java.util.ArrayList;
4957 phani.kuma 41
import java.util.Arrays;
2105 ankur.sing 42
import java.util.Calendar;
2068 ankur.sing 43
import java.util.Collections;
2427 ankur.sing 44
import java.util.Date;
1992 ankur.sing 45
import java.util.HashMap;
5118 mandeep.dh 46
import java.util.HashSet;
1961 ankur.sing 47
import java.util.List;
1992 ankur.sing 48
import java.util.Map;
2359 ankur.sing 49
import java.util.Map.Entry;
5118 mandeep.dh 50
import java.util.Set;
1961 ankur.sing 51
 
2427 ankur.sing 52
import org.apache.log4j.Logger;
3907 chandransh 53
import org.apache.thrift.TException;
54
import org.apache.thrift.transport.TTransportException;
2359 ankur.sing 55
 
1961 ankur.sing 56
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
57
 
58
@SuppressWarnings("serial")
59
public class CatalogServiceImpl extends RemoteServiceServlet implements CatalogService {
60
 
11671 vikram.rag 61
	private static Logger logger = Logger.getLogger(CatalogServiceImpl.class);
62
 
63
	private static Logger pushToProdLogger = Logger.getLogger("pushToProdLogger");
64
 
65
	private static Date pushToProdDate;
66
 
67
	private static String logFile;
68
 
69
	private static int maxCount;
70
 
71
	private static final int EBAYSOURCE = 6;
72
	private static final int SNAPDEALSOURCE = 7;
73
	private static final int FLIPKARTSOURCE = 8;
74
 
75
	List<Item> privateDealitemList;
76
 
77
	static {
78
		try {
79
			logFile = ConfigClient.getClient().get(ConfigClientKeys.push_prices_to_prod_log_file.toString());
80
			maxCount = Integer.parseInt(ConfigClient.getClient().get(ConfigClientKeys.push_prices_to_prod_max_count.toString()));    
81
		} catch(ConfigException ce) {
82
			logger.error("Unable to connect to the config server. Setting sensible defaults.", ce);
83
			logFile = "/var/log/services/pushToProductionCount/pushToProd.log";
84
			maxCount = 5;
85
		}
86
 
87
	}
88
 
89
	@Override
90
	public int getItemCountByStatus(boolean useStatus, ItemStatus itemStatus){
91
		int count = 0;
92
		try{
93
			CatalogClient catalogServiceClient = new CatalogClient();
94
			Client catalogClient = catalogServiceClient.getClient();
95
 
96
			status stat = status.findByValue(itemStatus.getValue());
97
			count = catalogClient.getItemCountByStatus(useStatus, stat);
98
		}catch(Exception e){
99
			logger.error("Error while getting the count of items from the catalog service", e);
100
		}
101
		return count;
102
	}
103
 
104
	@Override
6530 vikram.rag 105
	public List<Item> getInventoryOutofSyncItems(int offset, int limit){
11671 vikram.rag 106
		List<Item> itemList = new ArrayList<Item>();
6530 vikram.rag 107
 
11671 vikram.rag 108
		try {
109
			CatalogClient catalogServiceClient = new CatalogClient();
110
			Client catalogClient = catalogServiceClient.getClient();
6530 vikram.rag 111
 
11671 vikram.rag 112
			List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getAllIgnoredInventoryUpdateItemsList(offset, limit);
6530 vikram.rag 113
 
11671 vikram.rag 114
			for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
115
				itemList.add(getItemFromThriftItem(thriftItem, null, null, null, null, null, null, null, null, null,null,null));
116
			}
117
		} catch (Exception e) {
118
			logger.error("Error while getting all items from the catalog service", e);
119
		}
120
		return itemList;
121
	}
6530 vikram.rag 122
 
11671 vikram.rag 123
	@Override
124
	public int getInventoryOutofSyncItemsCount(){
125
		int count=0;
126
		try {
127
			InventoryClient inventoryServiceClient = new InventoryClient();
128
			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
6530 vikram.rag 129
 
11671 vikram.rag 130
			count = inventoryClient.getAllIgnoredInventoryupdateItemsCount();
2359 ankur.sing 131
 
11671 vikram.rag 132
		} catch (Exception e) {
133
			logger.error("Error while getting all items from the catalog service", e);
134
		}
135
		return count;	
136
	}
2359 ankur.sing 137
 
11671 vikram.rag 138
	public List<Item> getPrivateDealItems(int offset,int limit){
139
		privateDealitemList = new ArrayList<Item>();
140
		try {
141
			CatalogClient catalogServiceClient = new CatalogClient();
142
			Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 143
 
11671 vikram.rag 144
			List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getPrivateDealItems(offset, limit);
2208 ankur.sing 145
 
11671 vikram.rag 146
			for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
147
				privateDealitemList.add(getItemFromThriftItem(thriftItem, null, null, null, null, null, null, null, null, null,null,null));
148
			}
149
		} catch (Exception e) {
150
			logger.error("Error while getting all items from the catalog service", e);
151
		}
152
		return privateDealitemList;
153
	}
154
	public int getPrivateDealItemsCount(){
155
		if(privateDealitemList!=null)
156
			return privateDealitemList.size();
157
		else
158
			return 0;
159
	}
2359 ankur.sing 160
 
11671 vikram.rag 161
	@Override
162
	public List<Item> getAllItems(int start, int limit) {
163
		List<Item> itemList = new ArrayList<Item>();
164
		logger.error("Inside get All Items");
165
		try {
166
			CatalogClient catalogServiceClient = new CatalogClient();
167
			Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 168
 
11671 vikram.rag 169
			List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getAllItemsInRange(start, limit);
170
			logger.error("Before get item from thrift");
171
			for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
172
				itemList.add(getItemFromThriftItem(thriftItem, null, null, null, null, null, null, null, null, null,null,null));
173
			}
174
			logger.error("After get item from thrift");
175
		} catch (Exception e) {
176
			logger.error("Error while getting all items from the catalog service", e);
177
		}
178
		logger.error("Item List return Size "+ itemList.size());
179
		return itemList;
180
	}
2359 ankur.sing 181
 
11671 vikram.rag 182
	public List<Item> getAllActiveItems(int start, int limit){
183
		return getItemsByStatus(status.ACTIVE, start, limit);
184
	}
2359 ankur.sing 185
 
11671 vikram.rag 186
	@Override
187
	public List<Item> getAllPhasedOutItems(int start, int limit){
188
		return getItemsByStatus(status.PHASED_OUT, start, limit);
189
	}
2359 ankur.sing 190
 
11671 vikram.rag 191
	@Override
192
	public List<Item> getAllPausedItems(int start, int limit){
193
		return getItemsByStatus(status.PAUSED, start, limit);
194
	}
2359 ankur.sing 195
 
11671 vikram.rag 196
	@Override
197
	public List<Item> getAllInProcessItems(int start, int limit) {
198
		return getItemsByStatus(status.IN_PROCESS, start, limit);
199
	}
2359 ankur.sing 200
 
11671 vikram.rag 201
	@Override
202
	public List<Item> getAllContentCompleteItems(int start, int limit) {
203
		return getItemsByStatus(status.CONTENT_COMPLETE, start, limit);
204
	}
2359 ankur.sing 205
 
11671 vikram.rag 206
	public List<Item> getBestDeals(){
207
		List<Item> itemList = new ArrayList<Item>();
208
		try {
209
			CatalogClient catalogServiceClient = new CatalogClient();
210
			Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 211
 
11671 vikram.rag 212
			List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getBestDeals();
213
			for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
214
				itemList.add(getItemFromThriftItem(thriftItem, null, null, null, null, null, null, null, null, null,null,null));
215
			}
216
		} catch(Exception e){
217
			logger.error("Error while getting the best deals from the catalog service", e);
218
		}
219
		//Collections.sort(itemList, new ItemsComparator());
220
		return itemList;
221
	}
2359 ankur.sing 222
 
11671 vikram.rag 223
	@Override
224
	public List<Item> getRiskyItems() {
225
		List<Item> itemList = new ArrayList<Item>();
226
		try {
227
			CatalogClient catalogServiceClient = new CatalogClient();
228
			Client catalogClient = catalogServiceClient.getClient();
229
 
230
			List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getItemsByRiskyFlag();
231
			for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
232
				itemList.add(getItemFromThriftItem(thriftItem, null, null, null, null, null, null, null, null, null,null,null));
233
			}
234
		} catch(Exception e){
235
			logger.error("Error while getting the risky items from the catalog service", e);
236
		}
237
		Collections.sort(itemList, new ItemsComparator());
238
		return itemList;
239
	}
240
 
241
	public List<Item> getBestSellers(){
242
		List<Item> itemList = new ArrayList<Item>();
243
 
244
		try {
245
			CatalogClient catalogServiceClient = new CatalogClient();
246
			Client catalogClient = catalogServiceClient.getClient();
247
 
248
			List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getBestSellers();
249
			for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
250
				itemList.add(getItemFromThriftItem(thriftItem, null, null, null, null, null, null, null, null, null,null,null));
251
			}
252
		} catch(Exception e){
253
			logger.error("Error while getting the best sellers from the catalog service", e);
254
		}
255
		return itemList;        
256
	}
257
 
258
	@Override
259
	public boolean addtoIgnoredInventoryUpdateItemsIdsWarehouseIds(long itemId,long warehouseId){
260
		try {
261
			InventoryClient inventoryServiceClient = new InventoryClient();
262
			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
263
			return inventoryClient.insertItemtoIgnoreInventoryUpdatelist(itemId, warehouseId);
6530 vikram.rag 264
		} catch (Exception e) {
6532 amit.gupta 265
			logger.error("Error while inserting item to ignore inventory update list", e);
11671 vikram.rag 266
		}
6530 vikram.rag 267
		return false;
11671 vikram.rag 268
	}
2359 ankur.sing 269
 
11671 vikram.rag 270
	@Override
271
	public boolean deleteFromIgnoredInventoryUpdateItemsIdsWarehouseIds(long itemId,long warehouseId){
272
		try {
273
			InventoryClient inventoryServiceClient = new InventoryClient();
274
			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
275
			return inventoryClient.deleteItemFromIgnoredInventoryUpdateList(itemId,warehouseId);
6530 vikram.rag 276
 
11671 vikram.rag 277
		} catch (Exception e) {
278
			logger.error("Error while inserting item to ignore inventory update list", e);
279
		}
280
		return false;
281
	}
6530 vikram.rag 282
 
2359 ankur.sing 283
 
284
 
11671 vikram.rag 285
	@Override
286
	public List<Item> getLatestArrivals(){
287
		List<Item> itemList = new ArrayList<Item>();
2359 ankur.sing 288
 
11671 vikram.rag 289
		try {
290
			CatalogClient catalogServiceClient = new CatalogClient();
291
			Client catalogClient = catalogServiceClient.getClient();
3872 chandransh 292
 
11671 vikram.rag 293
			List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getLatestArrivals();
294
			for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
295
				//List<in.shop2020.model.v1.inventory.VendorItemPricing> vip = catalogClient.getAllItemPricing(thriftItem.getId());
296
				itemList.add(getItemFromThriftItem(thriftItem, null, null, null, null, null, null, null, null, null,null,null));
297
			}
298
		} catch(Exception e){
299
			logger.error("Error while getting the latest arrivals from the catalog service", e);
300
		}
301
		return itemList;
302
	}
3872 chandransh 303
 
11671 vikram.rag 304
	@Override
305
	public List<Item> searchItems(int start, int limit, List<String> searchTerms) {
306
		List<Item> itemList = new ArrayList<Item>();
3872 chandransh 307
 
11671 vikram.rag 308
		try {
309
			CatalogClient catalogServiceClient = new CatalogClient();
310
			Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 311
 
11671 vikram.rag 312
			List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.searchItemsInRange(searchTerms, start, limit);
313
			for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
314
				itemList.add(getItemFromThriftItem(thriftItem, null, null, null, null, null, null, null, null,null));
315
			}
316
		} catch(Exception e){
317
			logger.error("Error while getting the search results from the catalog service", e);
318
		}
319
		return itemList;
320
	}
2359 ankur.sing 321
 
11671 vikram.rag 322
	@Override
323
	public int getSearchResultCount(List<String> searchTerms){
324
		int count = 0;
325
		try {
326
			CatalogClient catalogServiceClient = new CatalogClient();
327
			Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 328
 
11671 vikram.rag 329
			count = catalogClient.getSearchResultCount(searchTerms);
330
		} catch(Exception e){
331
			logger.error("Error while getting the search results from the catalog service", e);
332
		}
2359 ankur.sing 333
 
11671 vikram.rag 334
		return count;
335
	}
2359 ankur.sing 336
 
11671 vikram.rag 337
	public Item getItem(long itemId){
338
		try{
339
			CatalogClient catalogServiceClient = new CatalogClient();
340
			Client catalogClient = catalogServiceClient.getClient();
341
			InventoryClient inventoryServiceClient = new InventoryClient();
342
			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
343
			in.shop2020.model.v1.catalog.Item thriftItem = catalogClient.getItem(itemId);
344
			PrivateDeal privateDeal = catalogClient.getPrivateDealDetails(itemId);
345
			Long catalogItemId = thriftItem.getCatalogItemId();
346
			List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getItemsByCatalogId(catalogItemId);
347
			List <Long> sameItemsWithDifferentColors = new ArrayList<Long>();
348
			if(thriftItems.size()>1){
349
				for(in.shop2020.model.v1.catalog.Item tItem : thriftItems ){
350
					Long id = tItem.getId();
351
					if(!id.equals(itemId)){
352
						sameItemsWithDifferentColors.add(id); 
353
					}
354
				}
355
			}
356
			List<in.shop2020.model.v1.inventory.VendorItemPricing> vip = inventoryClient.getAllItemPricing(thriftItem.getId());
357
			Map<Long,String> stateIdNameMap = inventoryClient.getStateMaster();
2359 ankur.sing 358
 
11671 vikram.rag 359
			List<in.shop2020.model.v1.inventory.VendorItemMapping> vim = inventoryClient.getVendorItemMappings(thriftItem.getId());
360
			List<in.shop2020.model.v1.catalog.SourceItemPricing> sip = catalogClient.getAllSourcePricing(thriftItem.getId());
361
			List<in.shop2020.model.v1.catalog.Item> sit = catalogClient.getAllSimilarItems(thriftItem.getId());
362
			in.shop2020.model.v1.inventory.ItemInventory itemInventory = inventoryClient.getItemInventoryByItemId(thriftItem.getId());
363
			ItemStockPurchaseParams stockPurchaseParams = inventoryClient.getItemStockPurchaseParams(thriftItem.getId());
364
			Map<Long, String> saleHistory = new HashMap<Long, String>();
365
			List<OOSStatus> oosStatuses = inventoryClient.getOosStatusesForXDaysForItem(thriftItem.getId(), 0, 5);
366
			String lastNdaySale = getOosString(oosStatuses);
367
			saleHistory.put(0L,lastNdaySale);
368
			List<OOSStatus> webOosStatuses = inventoryClient.getOosStatusesForXDaysForItem(thriftItem.getId(), 1, 5);
369
			String webLastNdaySale = getOosString(webOosStatuses);
370
			saleHistory.put(1L,webLastNdaySale);
371
			List<OOSStatus> amzOosStatuses = inventoryClient.getOosStatusesForXDaysForItem(thriftItem.getId(), 3, 5);
372
			String amzLastNdaySale = getOosString(amzOosStatuses);
373
			saleHistory.put(3L,amzLastNdaySale);
374
			List<OOSStatus> ebayOosStatuses = inventoryClient.getOosStatusesForXDaysForItem(thriftItem.getId(), 6, 5);
375
			String ebayLastNdaySale = getOosString(ebayOosStatuses);
376
			saleHistory.put(6L,ebayLastNdaySale);
377
			List<OOSStatus> spdOosStatuses = inventoryClient.getOosStatusesForXDaysForItem(thriftItem.getId(), 7, 5);
378
			String spdLastNdaySale = getOosString(spdOosStatuses);
379
			saleHistory.put(7L,spdLastNdaySale);
380
			List<OOSStatus> fktOosStatuses = inventoryClient.getOosStatusesForXDaysForItem(thriftItem.getId(), 8, 5);
381
			String fktLastNdaySale = getOosString(fktOosStatuses);
382
			saleHistory.put(8L,fktLastNdaySale);
383
			Long freebieItemId = catalogClient.getFreebieForItem(thriftItem.getId());
384
			List<in.shop2020.model.v1.catalog.VoucherItemMapping> tvouchers = catalogClient.getAllItemVouchers(thriftItem.getId());
385
			Map<String,String> stateNameVatPercentageMap = new HashMap<String,String>();
386
			catalogClient =  new CatalogClient("catalog_service_server_host_prod","catalog_service_server_port").getClient();
387
			double vatrate;
388
			for(Entry<Long, String> entry:stateIdNameMap.entrySet()){
389
				try{
390
					vatrate= catalogClient.getVatPercentageForItem(thriftItem.getId(),entry.getKey(),thriftItem.getSellingPrice());
391
				}
392
				catch(CatalogServiceException cex){
393
					vatrate = -1.0;
394
				}
395
				stateNameVatPercentageMap.put(entry.getValue(),String.valueOf(vatrate));
396
			}
397
			Item it = getItemFromThriftItem(thriftItem, vip, vim, sip, sit, itemInventory, tvouchers, stockPurchaseParams, saleHistory, freebieItemId , stateNameVatPercentageMap,privateDeal);
398
			it.setSameItemsWithDifferentColors(sameItemsWithDifferentColors);
399
			return it;
400
		}catch(Exception e){
401
			logger.error("Error while getting the item from the catalog service", e);
402
		}
403
		return null;
404
	}
405
 
406
	private String getOosString(List<OOSStatus> oosStatuses){
407
		String lastNdaySale = "";
408
		for(OOSStatus oosStatus : oosStatuses){
409
			if(oosStatus.isIs_oos()){
410
				lastNdaySale += "X-";
411
			}else{
412
				lastNdaySale += oosStatus.getNum_orders() + "-";
413
			}
414
		}
415
		if(lastNdaySale!=""){
416
			lastNdaySale = lastNdaySale.substring(0, lastNdaySale.length()-1);
417
		}
418
		return lastNdaySale;
419
	}
420
 
421
	@Override
422
	public boolean updateItem(Item item) {
423
		logger.info("Updating item with Id: " + item.getId());
424
		try{
425
			CatalogClient catalogServiceClient = new CatalogClient();
426
			Client catalogClient = catalogServiceClient.getClient();
6530 vikram.rag 427
			InventoryClient inventoryServiceClient = new InventoryClient();
11671 vikram.rag 428
			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
429
 
430
			in.shop2020.model.v1.catalog.Item tItem = catalogClient.getItem(item.getId());
431
			in.shop2020.model.v1.catalog.PrivateDeal privateDeal = new in.shop2020.model.v1.catalog.PrivateDeal(); 
432
			privateDeal.setItem_id(item.getId());
433
			privateDeal.setDealFreebieItemId(item.getPrivateDeal().getDealFreebieItemId());
434
			privateDeal.setDealPrice(item.getPrivateDeal().getDealPrice());
435
			privateDeal.setDealText(item.getPrivateDeal().getDealText());
436
			privateDeal.setDealFreebieOption(item.getPrivateDeal().getDealFreebieOption());
437
			privateDeal.setDealTextOption(item.getPrivateDeal().getDealTextOption());
438
			if(item.getPrivateDeal().getEndDate()!=null){
439
				privateDeal.setEndDate(item.getPrivateDeal().getEndDate());
440
			}
441
			if(item.getPrivateDeal().getStartDate()!=null){
442
				privateDeal.setStartDate(item.getPrivateDeal().getStartDate());
443
			}
444
			privateDeal.setIsCod(item.getPrivateDeal().isCod());
445
			privateDeal.setRank(item.getPrivateDeal().getRank());
446
			privateDeal.setIsActive(item.getPrivateDeal().isActive());
447
			if(privateDeal.getDealPrice() > 0 && privateDeal.getEndDate()!=0 && privateDeal.getStartDate()!=0){
448
				logger.info("Updating Private deal: " + item.getId());
449
				logger.info("Deal Price "+privateDeal.getDealPrice());
450
				logger.info("Deal Start Date "+privateDeal.getStartDate());
451
				logger.info("Deal End Date "+privateDeal.getEndDate());
452
				logger.info("Has COD on deal: " + privateDeal.isIsCod());
453
				logger.info("Response" + catalogClient.addOrUpdatePrivateDeal(privateDeal));
454
				logger.info("Updated Private deal: " + item.getId());
455
			}
456
			else{
457
				logger.info("Skipping Private deal: " + item.getId());
458
				logger.info("Deal Price "+privateDeal.getDealPrice());
459
				logger.info("Deal Start Date "+privateDeal.getStartDate());
460
				logger.info("Deal End Date "+privateDeal.getEndDate());
461
			}
462
			setThriftItemParams(tItem, item);
463
			long rItemId;
464
			if((rItemId = catalogClient.updateItem(tItem)) != item.getId()) {
465
				logger.error("Error updating item, returned Item Id: " + rItemId);
466
				return false;
467
			}
468
			logger.info("Successfully updated item with id: " + item.getId());
469
 
470
			Map<String, VendorItemMapping> vendorMappings = item.getVendorKeysMap();
471
			if(vendorMappings != null && !vendorMappings.isEmpty()) {
472
				in.shop2020.model.v1.inventory.VendorItemMapping tVendorMapping;
473
 
474
				for(Entry<String, VendorItemMapping> e : vendorMappings.entrySet()) {
475
					tVendorMapping = new in.shop2020.model.v1.inventory.VendorItemMapping();
476
					VendorItemMapping v = e.getValue();
477
					tVendorMapping.setVendorId(v.getVendorId());
478
					tVendorMapping.setItemKey(v.getItemKey());
479
					tVendorMapping.setItemId(item.getId());
480
					inventoryClient.addVendorItemMapping(e.getKey().substring(e.getKey().indexOf(Item.KEY_SEPARATOR)+1), tVendorMapping);
481
					logger.info("Updates VendorItemMapping: " + tVendorMapping.toString());
482
				}
483
			}
484
 
485
			if(item.getMinStockLevel()!=0 || item.getNumOfDaysStock()!=0) {
486
				inventoryClient.updateItemStockPurchaseParams(item.getId(), item.getNumOfDaysStock(),
487
						item.getMinStockLevel());
488
			}
489
 
490
			if(item.getFreebieItemId()!=null) {
491
				in.shop2020.model.v1.catalog.FreebieItem freebieItem = new in.shop2020.model.v1.catalog.FreebieItem();
492
				freebieItem.setItemId(item.getId());
493
				freebieItem.setFreebieItemId(item.getFreebieItemId());
494
				catalogClient.addOrUpdateFreebieForItem(freebieItem);
495
			}
496
 
497
			Map<Long, VendorPricings> vendorPricings = item.getVendorPricesMap();
498
			if(vendorPricings != null && !vendorPricings.isEmpty()) {
499
				in.shop2020.model.v1.inventory.VendorItemPricing tVendorPricing;
500
				for(VendorPricings v : vendorPricings.values()) {
501
					tVendorPricing = new in.shop2020.model.v1.inventory.VendorItemPricing();
502
					tVendorPricing.setVendorId(v.getVendorId());
503
					tVendorPricing.setItemId(item.getId());
504
					tVendorPricing.setMop(v.getMop());
505
					tVendorPricing.setTransferPrice(v.getTransferPrice());
506
					tVendorPricing.setDealerPrice(v.getDealerPrice());
507
					tVendorPricing.setNlc(v.getNlc());
508
					inventoryClient.addVendorItemPricing(tVendorPricing);
509
					logger.info("Updated VendorItemPricing: " + tVendorPricing.toString());
510
				}
511
			}
512
 
513
			Map<Long, SourcePricings> sourcePricings = item.getSourcePricesMap();
514
			if(sourcePricings != null && !sourcePricings.isEmpty()) {
515
				in.shop2020.model.v1.catalog.SourceItemPricing tSourcePricings;
516
				for(SourcePricings s : sourcePricings.values()) {
517
					tSourcePricings = new in.shop2020.model.v1.catalog.SourceItemPricing();
518
					tSourcePricings.setSourceId(s.getSourceId());
519
					tSourcePricings.setItemId(item.getId());
520
					tSourcePricings.setMrp(s.getMrp());
521
					tSourcePricings.setSellingPrice(s.getSellingPrice());
522
					catalogClient.addSourceItemPricing(tSourcePricings);
523
					logger.info("Updated SourceItemPricing: " + tSourcePricings.toString());
524
				}
525
			}
526
 
527
		}catch(Exception e){
528
			logger.error("Error while updating item: ", e);
529
			return false;
530
		}
531
		return true;
532
	}
533
 
534
	@Override
535
	public List<Long> getMonitoredWarehouseIdsForVendors(List<Long> vendorIds){
536
		List<Long> monitoredWarehouseids=null;
537
		try {
538
			InventoryClient inventoryServiceClient = new InventoryClient();
539
			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
540
			monitoredWarehouseids = inventoryClient.getMonitoredWarehouseForVendors(vendorIds);
6530 vikram.rag 541
		} catch (Exception e) {
542
			logger.error("Error while getting Monitored warehouse for vendor: ", e);
543
		}
544
		return monitoredWarehouseids;
11671 vikram.rag 545
 
546
	}
547
 
548
	@Override
549
	public List<ItemWarehouse> getignoredInventoryUpdateItemsIdsWarehouseIds(){
6530 vikram.rag 550
		List<ItemWarehouse> ignoredItemIdwarehouseIdList = new ArrayList<ItemWarehouse>();
11671 vikram.rag 551
		try {
2359 ankur.sing 552
 
6530 vikram.rag 553
			InventoryClient inventoryServiceClient = new InventoryClient();
554
			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
555
			List<IgnoredInventoryUpdateItems> ignoredInventoryUpdateItems = inventoryClient.getIgnoredWarehouseidsAndItemids();
556
			for(IgnoredInventoryUpdateItems ignoredInventoryUpdateItem:ignoredInventoryUpdateItems){
557
				ignoredItemIdwarehouseIdList.add(new ItemWarehouse(ignoredInventoryUpdateItem.getItemId(),ignoredInventoryUpdateItem.getWarehouseId()));
558
			}
11671 vikram.rag 559
 
560
 
6530 vikram.rag 561
		} catch (Exception e) {
562
			logger.error("Error while getting Monitored warehouseid and itemid : ", e);
563
		}
564
		return ignoredItemIdwarehouseIdList;
2359 ankur.sing 565
 
11671 vikram.rag 566
	}
567
	@Override
568
	public Map<Long, String> getAllVendors() {
569
		Map<Long, String> vendorMap = new HashMap<Long, String>();
570
		try {
571
			InventoryClient inventoryServiceClient = new InventoryClient();
572
			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
2066 ankur.sing 573
 
11671 vikram.rag 574
			List<in.shop2020.model.v1.inventory.Vendor> vendors = inventoryClient.getAllVendors();
3558 rajveer 575
 
11671 vikram.rag 576
			for(in.shop2020.model.v1.inventory.Vendor v : vendors) {
577
				vendorMap.put(v.getId(), v.getName());
578
			}
579
		} catch (Exception e) {
580
			logger.error("Error while getting all the vendors: ", e);
581
		}
582
		return vendorMap;
583
	}
3558 rajveer 584
 
11671 vikram.rag 585
	@Override
586
	public Map<Long, String> getAllSources() {
587
		Map<Long, String> sourceMap = new HashMap<Long, String>();
588
		try {
589
			CatalogClient catalogServiceClient = new CatalogClient();
590
			Client catalogClient = catalogServiceClient.getClient();
3558 rajveer 591
 
11671 vikram.rag 592
			List<in.shop2020.model.v1.catalog.Source> sources = catalogClient.getAllSources();
5118 mandeep.dh 593
 
11671 vikram.rag 594
			for(in.shop2020.model.v1.catalog.Source s : sources) {
595
				sourceMap.put(s.getId(), s.getName());
596
			}
597
		} catch (Exception e) {
598
			logger.error("Error while getting all the vendors: ", e);
599
		}
600
		return sourceMap;
601
	}
5118 mandeep.dh 602
 
11671 vikram.rag 603
	@Override
604
	public Map<Long, String> getShippingWarehouses() {
605
		Map<Long, String> warehouseMap = new HashMap<Long, String>();
606
		Set<Long> shippingLocations = new HashSet<Long>();
607
		try {
608
			InventoryClient inventoryServiceClient = new InventoryClient();
609
			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
2359 ankur.sing 610
 
11671 vikram.rag 611
			List<in.shop2020.model.v1.inventory.Warehouse> warehouses = inventoryClient.getAllWarehouses(true);
2359 ankur.sing 612
 
11671 vikram.rag 613
			for(in.shop2020.model.v1.inventory.Warehouse warehouse : warehouses) {
614
				shippingLocations.add(warehouse.getShippingWarehouseId());
615
			}
2105 ankur.sing 616
 
11671 vikram.rag 617
			for(in.shop2020.model.v1.inventory.Warehouse warehouse : warehouses) {
618
				if (shippingLocations.contains(warehouse.getId())) {
619
					warehouseMap.put(warehouse.getId(), warehouse.getDisplayName());
620
				}                
621
			}
622
		} catch (Exception e) {
623
			logger.error("Error while getting all the warehouses:", e );
624
		}
625
		return warehouseMap;
626
	}
2126 ankur.sing 627
 
11671 vikram.rag 628
	@Override
629
	public Map<Long, String> getAllWarehouses() {
630
		Map<Long, String> warehouseMap = new HashMap<Long, String>();
631
		try {
632
			InventoryClient inventoryServiceClient = new InventoryClient();
633
			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
2105 ankur.sing 634
 
11671 vikram.rag 635
			List<in.shop2020.model.v1.inventory.Warehouse> warehouses = inventoryClient.getAllWarehouses(true);
2359 ankur.sing 636
 
11671 vikram.rag 637
			for(in.shop2020.model.v1.inventory.Warehouse w : warehouses) {
638
				warehouseMap.put(w.getId(), w.getDisplayName());
639
			}
640
		} catch (Exception e) {
641
			logger.error("Error while getting all the warehouses:", e );
642
		}
643
		return warehouseMap;
644
	}
2119 ankur.sing 645
 
11671 vikram.rag 646
	@Override
647
	public long addItem(Item item) {
648
		long itemId = 0;
649
		try {
650
			CatalogClient catalogServiceClient = new CatalogClient();
651
			Client catalogClient = catalogServiceClient.getClient();
652
			InventoryClient inventoryServiceClient = new InventoryClient();
653
			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
2359 ankur.sing 654
 
11671 vikram.rag 655
			in.shop2020.model.v1.catalog.Item tItem = new in.shop2020.model.v1.catalog.Item();
656
			setThriftItemParams(tItem, item);
657
			itemId = catalogClient.addItem(tItem);
658
			PrivateDeal privateDeal = catalogClient.getPrivateDealDetails(item.getId());
659
			if(item.getPrivateDeal().getDealPrice() != 0 || item.getPrivateDeal().getDealFreebieItemId() != 0){
660
				privateDeal.setItem_id(item.getId());
661
				privateDeal.setDealFreebieItemId(item.getPrivateDeal().getDealFreebieItemId());
662
				privateDeal.setDealPrice(item.getPrivateDeal().getDealPrice());
663
				catalogClient.addOrUpdatePrivateDeal(privateDeal);
664
			}
665
			Map<Long, VendorPricings> vendorPricings = item.getVendorPricesMap();
666
			if(vendorPricings != null && !vendorPricings.isEmpty()) {
667
				in.shop2020.model.v1.inventory.VendorItemPricing tVendorPricing;
668
				for(VendorPricings v : vendorPricings.values()) {
669
					tVendorPricing = new in.shop2020.model.v1.inventory.VendorItemPricing();
670
					tVendorPricing.setVendorId(v.getVendorId());
671
					tVendorPricing.setItemId(itemId);
672
					tVendorPricing.setMop(v.getMop());
673
					tVendorPricing.setTransferPrice(v.getTransferPrice());
674
					tVendorPricing.setNlc(v.getNlc());
675
					tVendorPricing.setDealerPrice(v.getDealerPrice());
676
					inventoryClient.addVendorItemPricing(tVendorPricing);
677
				}
678
			}
2359 ankur.sing 679
 
11671 vikram.rag 680
			Map<String, VendorItemMapping> vendorKeysMap = item.getVendorKeysMap();
681
			if(vendorKeysMap != null && !vendorKeysMap.isEmpty()) {
682
				in.shop2020.model.v1.inventory.VendorItemMapping tVendorMapping;
683
				for(Entry<String, VendorItemMapping> e : vendorKeysMap.entrySet()) {
684
					tVendorMapping = new in.shop2020.model.v1.inventory.VendorItemMapping();
685
					VendorItemMapping v = e.getValue();
686
					tVendorMapping.setVendorId(v.getVendorId());
687
					tVendorMapping.setItemKey(v.getItemKey());
688
					tVendorMapping.setItemId(itemId);
689
					inventoryClient.addVendorItemMapping(e.getKey().substring(e.getKey().indexOf(Item.KEY_SEPARATOR)+1), tVendorMapping);
690
				}
691
			}
2359 ankur.sing 692
 
11671 vikram.rag 693
			inventoryClient.updateItemStockPurchaseParams(itemId, item.getNumOfDaysStock(),
694
					item.getMinStockLevel());
7291 vikram.rag 695
 
11671 vikram.rag 696
			if(item.getFreebieItemId()!=null && item.getFreebieItemId()!=0) {
697
				in.shop2020.model.v1.catalog.FreebieItem freebieItem = 
698
					new in.shop2020.model.v1.catalog.FreebieItem();
699
				freebieItem.setItemId(itemId);
700
				freebieItem.setFreebieItemId(item.getFreebieItemId());
701
				catalogClient.addOrUpdateFreebieForItem(freebieItem);
702
			}
5217 amit.gupta 703
 
11671 vikram.rag 704
		} catch (Exception e) {
705
			logger.error("Error while adding an item: ", e);
706
		}
707
		return itemId;
708
	}
2126 ankur.sing 709
 
11671 vikram.rag 710
	@Override
711
	public long checkSimilarItem(String brand, String modelNumber, String modelName, String color) {
2359 ankur.sing 712
 
11671 vikram.rag 713
		try {
714
			CatalogClient catalogServiceClient = new CatalogClient();
715
			Client catalogClient = catalogServiceClient.getClient();
716
			return catalogClient.checkSimilarItem(brand, modelNumber, modelName, color);
717
		} catch (Exception e) {
718
			logger.error("Error while checking for a similar item: ", e);
719
		}
720
		return 0;
721
	}
2359 ankur.sing 722
 
11671 vikram.rag 723
	private void setThriftItemParams(in.shop2020.model.v1.catalog.Item tItem, Item item) {
724
		tItem.setId(tItem.getId());
725
		tItem.setProductGroup(item.getProductGroup());
726
		tItem.setBrand(item.getBrand());
727
		tItem.setModelName(item.getModelName());
728
		tItem.setModelNumber(item.getModelNumber());
729
		tItem.setColor(item.getColor());
730
		tItem.setShowSellingPrice(item.isShowSellingPrice());
731
		tItem.setHoldOverride(item.isHoldOverride());
732
		tItem.setStatus_description(item.getItemStatusDesc());
733
		tItem.setComments(item.getComments());
2126 ankur.sing 734
 
11671 vikram.rag 735
		if(item.getMrp() != null) {
736
			tItem.setMrp(item.getMrp());
737
		}
2359 ankur.sing 738
 
11671 vikram.rag 739
		if(item.getCatalogItemId() != null) {
740
			tItem.setCatalogItemId(item.getCatalogItemId());
741
		}
2359 ankur.sing 742
 
11671 vikram.rag 743
		if(item.getSellingPrice() != null) {
744
			tItem.setSellingPrice(item.getSellingPrice());
745
		}
2359 ankur.sing 746
 
11671 vikram.rag 747
		if(item.getWeight() != null) {
748
			tItem.setWeight(item.getWeight());
749
		}
2359 ankur.sing 750
 
11671 vikram.rag 751
		if(item.getExpectedDelay() != null) {
752
			tItem.setExpectedDelay(item.getExpectedDelay());
753
		}
2359 ankur.sing 754
 
11671 vikram.rag 755
		tItem.setIsWarehousePreferenceSticky(item.isWarehouseStickiness());
2359 ankur.sing 756
 
11671 vikram.rag 757
		if(item.getPreferredVendor() != null) {
758
			tItem.setPreferredVendor(item.getPreferredVendor());
759
		}
760
		tItem.setPreferredInsurer(item.getPreferredInsurer());
2359 ankur.sing 761
 
11671 vikram.rag 762
		if(item.getAsin() != null) {
763
			tItem.setAsin(item.getAsin());
764
		}
765
		if(item.getHoldInventory()!= null) {
766
			tItem.setHoldInventory(item.getHoldInventory());
767
		}
768
		else{
769
			tItem.setHoldInventory(0);
770
		}	
771
		if(item.getDefaultInventory()!=null){
772
			tItem.setDefaultInventory(item.getDefaultInventory());
773
		}
774
		else{
775
			tItem.setDefaultInventory(0);
776
		}
777
		tItem.setBestDealText(item.getBestDealsText());
778
		tItem.setBestDealsDetailsText(item.getBestDealsDetailsText());
779
		tItem.setBestDealsDetailsLink(item.getBestDealsDetailsLink());
780
		if(item.getBestDealsValue() != null) {
781
			tItem.setBestDealValue(item.getBestDealsValue());
782
		}
2359 ankur.sing 783
 
11671 vikram.rag 784
		if(item.getBestSellingRank() != null) {
785
			tItem.setBestSellingRank(item.getBestSellingRank());
786
		}
2359 ankur.sing 787
 
11671 vikram.rag 788
		tItem.setDefaultForEntity(item.isDefaultForEntity());
789
		tItem.setRisky(item.isRisky());
790
		tItem.setHasItemNo(item.isHasItemNo());
2359 ankur.sing 791
 
11671 vikram.rag 792
		if(item.isItemType()) {
793
			tItem.setType(ItemType.SERIALIZED);
794
		}
795
		else {
796
			tItem.setType(ItemType.NON_SERIALIZED);
797
		}
798
 
799
		if(item.getStartDate() != null) {
800
			tItem.setStartDate(item.getStartDate());
801
		}
802
 
803
		if(item.getExpectedArrivalDate() != null) {
804
			tItem.setExpectedArrivalDate(item.getExpectedArrivalDate());
805
		} else {
806
			tItem.unsetComingSoonStartDate();
807
			tItem.unsetExpectedArrivalDate();
808
			if(status.COMING_SOON.equals(tItem.getItemStatus())){
809
				tItem.setItemStatus(status.CONTENT_COMPLETE);
810
				tItem.setStatus_description("Content generation completed");
811
			}
812
		}
813
 
814
		if(item.getComingSoonStartDate() != null) {
815
			tItem.setComingSoonStartDate(item.getComingSoonStartDate());
816
		} else {
817
			tItem.unsetComingSoonStartDate();
818
		}
819
 
820
		if(item.getRetireDate() != null) {
821
			tItem.setRetireDate(item.getRetireDate());
822
		}
823
 
824
		tItem.setUpdatedOn(Calendar.getInstance().getTimeInMillis());
825
	}
826
 
827
	@Override
828
	public void pauseItem(long itemId) {
829
		try {
830
			CatalogClient catalogServiceClient = new CatalogClient();
831
			Client catalogClient = catalogServiceClient.getClient();
832
 
833
			catalogClient.changeItemStatus(itemId, Calendar.getInstance().getTimeInMillis(), status.PAUSED);
834
		} catch (Exception e) {
835
			logger.error("Error while pausing the item: " + itemId, e);
836
		}
837
 
838
	}
839
 
840
	@Override
841
	public void markInProcess(long itemId) {
842
		try {
843
			CatalogClient catalogServiceClient = new CatalogClient();
844
			Client catalogClient = catalogServiceClient.getClient();
845
 
846
			catalogClient.changeItemStatus(itemId, Calendar.getInstance().getTimeInMillis(), status.IN_PROCESS);
847
		} catch (Exception e) {
848
			logger.error("Error while marking in-process the item: " + itemId, e);
849
		}
850
	}
851
 
852
	@Override
853
	public void phaseoutItem(long itemId) {
854
		try {
855
			CatalogClient catalogServiceClient = new CatalogClient();
856
			Client catalogClient = catalogServiceClient.getClient();
857
 
858
			catalogClient.changeItemStatus(itemId, Calendar.getInstance().getTimeInMillis(), status.PHASED_OUT);
859
		} catch (Exception e) {
860
			logger.error("Error while phasing out the item: " + itemId, e);
861
		}
862
	}
863
 
864
	@Override
865
	public void activateItem(long itemId) {
866
		try {
867
			CatalogClient catalogServiceClient = new CatalogClient();
868
			Client catalogClient = catalogServiceClient.getClient();
869
 
870
			catalogClient.changeItemStatus(itemId, Calendar.getInstance().getTimeInMillis(), status.ACTIVE);
871
		} catch (Exception e) {
872
			logger.error("Error while activating the item: " + itemId, e);
873
		}
874
	}
875
 
876
	@Override
877
	public boolean changeItemRiskyFlag(long itemId, boolean risky) {
878
		try {
879
			logger.info("Updating risky flag for item id: " + itemId + " to " + risky);
880
			// Initialize client for staging server
881
			CatalogClient catalogServiceClient = new CatalogClient();
882
			Client catalogClient = catalogServiceClient.getClient();
883
 
884
			// Initialize client for production server
885
			CatalogClient catalogServiceClient_Prod = new CatalogClient(ConfigClientKeys.catalog_service_server_host_prod.toString(),
886
					ConfigClientKeys.catalog_service_server_port.toString());
887
			Client catalogClient_Prod = catalogServiceClient_Prod.getClient();
888
			catalogClient.changeItemRiskyFlag(itemId, risky);
889
 
890
			try{
891
				catalogClient_Prod.changeItemRiskyFlag(itemId, risky);
892
			}catch(Exception e){
893
				logger.error("Error while updating item's risky flag on production", e);
894
				// If not able to change risky flag on production, revert on staging and return false (to show error to user).
895
				catalogClient.changeItemRiskyFlag(itemId, !risky);        
896
				return false;
897
			}
898
		} catch (Exception e) {
899
			logger.error("Error while updating item's risky flag on staging", e);
900
			return false;
901
		}
902
		return true;
903
	}
904
 
905
 
906
	/**
907
	 * Retuns list of Items filtered by category (column is product_group in catalog.item table)
908
	 * This list is used to generate master sheet (excel sheet)
909
	 * @param category
910
	 * @param brand
911
	 * @return
912
	 */
913
	public List<Item> getItemsForMasterSheet(String category, String brand) {
914
		List<Item> itemList = new ArrayList<Item>();
915
		try {
916
			CatalogClient catalogServiceClient = new CatalogClient();
917
			Client catalogClient = catalogServiceClient.getClient();
918
			InventoryClient inventoryServiceClient = new InventoryClient();
919
			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
920
 
921
			List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getItemsForMasterSheet(category, brand);
922
 
923
			for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
5946 rajveer 924
				List<in.shop2020.model.v1.inventory.VendorItemPricing> vip = inventoryClient.getAllItemPricing(thriftItem.getId());
925
				List<in.shop2020.model.v1.inventory.VendorItemMapping> vim = inventoryClient.getVendorItemMappings(thriftItem.getId());
5706 amit.gupta 926
				List<in.shop2020.model.v1.catalog.SourceItemPricing> sip = catalogClient.getAllSourcePricing(thriftItem.getId());
11671 vikram.rag 927
				itemList.add(getItemFromThriftItem(thriftItem, vip, vim, sip, null, null, null, null, null, null));
928
			}
929
		} catch (Exception e) {
930
			logger.error("Error while getting items by category: " + category, e);
931
		}
932
		Collections.sort(itemList, new ItemsComparator());
933
		return itemList;
934
	}
935
 
936
	@Override
937
	public String updateItemOnProduction(Item item) {
938
		if(!canPushToProduction()) {
939
			// If we can't push to production, then return that message to user
940
			// else move forward with update.
941
			return "Maximum push to production count reached for today";
942
		}
943
		List<Long> itemIds = item.getSameItemsWithDifferentColors();
944
		List<Item> items = new ArrayList<Item>();
945
		items.add(item);
946
		for(Long itemId : itemIds) {
947
			try {
948
				CatalogClient catalogServiceClient = new CatalogClient();
949
				Client catalogClient = catalogServiceClient.getClient();
950
				InventoryClient inventoryServiceClient = new InventoryClient();
951
				in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
952
 
953
				in.shop2020.model.v1.catalog.Item thriftItem = catalogClient.getItem(itemId);
954
				List<in.shop2020.model.v1.inventory.VendorItemPricing> vip = inventoryClient.getAllItemPricing(thriftItem.getId());
955
				List<in.shop2020.model.v1.inventory.VendorItemMapping> vim = inventoryClient.getVendorItemMappings(thriftItem.getId());
956
				List<in.shop2020.model.v1.catalog.SourceItemPricing> sip = catalogClient.getAllSourcePricing(thriftItem.getId());
9836 rajveer 957
				items.add(getItemFromThriftItem(thriftItem, vip, vim, sip, null, null, null, null, null, null));
11671 vikram.rag 958
			} catch (Exception e) {
959
				logger.error("Could not fetch item for : " + itemId, e);
960
				return "Could not push to production. No item got pushed.";
961
			}
962
		}
963
		for (Item it : items) {
964
			logger.info("Update item on production call, Item Id: " + it.getId());
3354 chandransh 965
 
11671 vikram.rag 966
			try{
967
				CatalogClient catalogServiceClient_Prod = new CatalogClient( 
968
						ConfigClientKeys.catalog_service_server_host_prod.toString(),
969
						ConfigClientKeys.catalog_service_server_port.toString());
3354 chandransh 970
 
11671 vikram.rag 971
				Client catalogClient_Prod = catalogServiceClient_Prod.getClient();
3354 chandransh 972
 
11671 vikram.rag 973
				in.shop2020.model.v1.catalog.Item tItem = catalogClient_Prod.getItem(it.getId());
3354 chandransh 974
 
11671 vikram.rag 975
				InventoryClient inventoryServiceClient = new InventoryClient();
976
				in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
3354 chandransh 977
 
11671 vikram.rag 978
				if(it.getMrp() != null) {
979
					tItem.setMrp(it.getMrp());
980
				}
3558 rajveer 981
 
11671 vikram.rag 982
				if(it.getSellingPrice() != null) {
983
					tItem.setSellingPrice(it.getSellingPrice());
984
				}
4423 phani.kuma 985
 
11671 vikram.rag 986
				tItem.setBestDealText(it.getBestDealsText());
987
 
988
				if (it.getItemStatusValue()  == ItemStatus.ACTIVE.getValue() || it.getItemStatusValue()  == ItemStatus.PAUSED.getValue()) {
989
					tItem.setItemStatus(status.findByValue(it.getItemStatusValue()));
990
					tItem.setStartDate(it.getStartDate());
991
				}
992
				long rItemId;
993
				if((rItemId = catalogClient_Prod.updateItem(tItem)) != it.getId()) {
994
					logger.error("Error updating item on production, returned Item Id: " + rItemId);
995
					return "Error updating item prices on production";
996
				}
997
				if(it.getFreebieItemId() !=null && it.getFreebieItemId()!=0) {
998
					in.shop2020.model.v1.catalog.FreebieItem freebieItem = new in.shop2020.model.v1.catalog.FreebieItem();
999
					freebieItem.setItemId(it.getId());
1000
					freebieItem.setFreebieItemId(it.getFreebieItemId());
1001
					catalogClient_Prod.addOrUpdateFreebieForItem(freebieItem);
1002
				}
1003
				logger.info("Successfully updated item: " + it.getId());
1004
 
1005
				StringBuilder sb = new StringBuilder();
1006
 
1007
				Map<Long, VendorPricings> vendorPricings = it.getVendorPricesMap();
1008
				if(vendorPricings != null && !vendorPricings.isEmpty()) {
1009
					in.shop2020.model.v1.inventory.VendorItemPricing tVendorPricing;
1010
					for(VendorPricings v : vendorPricings.values()) {
1011
						tVendorPricing = new in.shop2020.model.v1.inventory.VendorItemPricing();
1012
						tVendorPricing.setVendorId(v.getVendorId());
1013
						tVendorPricing.setItemId(it.getId());
1014
						tVendorPricing.setMop(v.getMop());
1015
						tVendorPricing.setTransferPrice(v.getTransferPrice());
1016
						tVendorPricing.setNlc(v.getNlc());
1017
						tVendorPricing.setDealerPrice(v.getDealerPrice());
1018
						inventoryClient.addVendorItemPricing(tVendorPricing);
1019
						logger.info("VendorItemPricing updated. " + tVendorPricing.toString());
1020
						sb.append("[VId:" + v.getVendorId() + ",MOP=" + v.getMop() + ",TP=" + v.getTransferPrice() + ",NLC= " +v.getNlc() + ",DP=" + v.getDealerPrice() + "], ");
1021
					}
1022
				}
1023
 
1024
				Map<String, VendorItemMapping> vendorMappings = it.getVendorKeysMap();
1025
				if(vendorMappings != null && !vendorMappings.isEmpty()) {
1026
					in.shop2020.model.v1.inventory.VendorItemMapping tVendorMapping;
1027
					for(VendorItemMapping vendorItemMapping : vendorMappings.values()) {
1028
						tVendorMapping = new in.shop2020.model.v1.inventory.VendorItemMapping();
1029
						tVendorMapping.setVendorId(vendorItemMapping.getVendorId());
1030
						tVendorMapping.setItemId(it.getId());
1031
						tVendorMapping.setItemKey(vendorItemMapping.getItemKey());
1032
						inventoryClient.addVendorItemMapping(vendorItemMapping.getItemKey(), tVendorMapping);
1033
						logger.info("VendorItemMapping updated. " + tVendorMapping.toString());
1034
						sb.append("[VId:" + vendorItemMapping.getVendorId() + ",ItemKey=" + vendorItemMapping.getItemKey() + "], ");
1035
					}
1036
				}
1037
 
1038
				Map<Long, SourcePricings> sourcePricings = it.getSourcePricesMap();
1039
				if(sourcePricings != null && !sourcePricings.isEmpty()){
1040
					in.shop2020.model.v1.catalog.SourceItemPricing tSourcePricing;
1041
					for(SourcePricings s : sourcePricings.values()){
1042
						tSourcePricing = new in.shop2020.model.v1.catalog.SourceItemPricing();
1043
						tSourcePricing.setSourceId(s.getSourceId());
1044
						tSourcePricing.setItemId(it.getId());
1045
						tSourcePricing.setMrp(s.getMrp());
1046
						tSourcePricing.setSellingPrice(s.getSellingPrice());
1047
						catalogClient_Prod.addSourceItemPricing(tSourcePricing);
1048
						logger.info("SourceItemPricing updated. " + tSourcePricing.toString());
1049
						sb.append("[SId:" + s.getSourceId() + ",MRP=" + s.getMrp() + ",SP=" + s.getSellingPrice() + "], ");
1050
					}
1051
				}
1052
 
1053
				pushToProdLogger.info("Id=" + it.getId() + ",MRP=" + it.getMrp() + ",SP=" + " " + it.getSellingPrice() + sb.toString());
1054
			} catch (Exception e) {
1055
				logger.error("Error while updating prices on production", e);
1056
				return "Error while updating all prices on production. Some of the prices may not have been  updated";
1057
			}
1058
		}
1059
 
1060
		try {
1061
			ContentClient contentServiceClient = new ContentClient();
1062
			ContentService.Client contentClient = contentServiceClient.getClient();
1063
 
1064
			contentClient.pushContentToProduction(items.get(0).getCatalogItemId());
1065
		} catch (TTransportException e) {
1066
			logger.error("Error while establishing connection to the content server", e);
1067
			return "Error generating content. Prices updated successfully.";
1068
		} catch (TException e) {
1069
			logger.error("Error while pushing content to production", e);
1070
			return "Error generating content. Prices updated successfully.";
1071
		} catch (ContentServiceException e) {
1072
			logger.error("Error while pushing content to production", e);
1073
			return "Error generating content. Prices updated successfully.";
1074
		}
1075
 
1076
		return "Prices updated and content generated successfully";
1077
	}
1078
 
1079
	/**
1080
	 * Returns list of items with a particular status.
1081
	 * @param st
1082
	 * @return
1083
	 */
1084
	private List<Item> getItemsByStatus(status st, int start, int limit) {
1085
		List<Item> itemList = new ArrayList<Item>();
1086
		try {
1087
			CatalogClient catalogServiceClient = new CatalogClient();
1088
			Client catalogClient = catalogServiceClient.getClient();
1089
 
1090
			List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getAllItemsByStatusInRange(st, start, limit);
1091
 
1092
			for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
1093
				itemList.add(getItemFromThriftItem(thriftItem, null, null, null, null, null, null, null, null, null, null, null));
1094
			}
1095
		} catch (Exception e) {
1096
			logger.error("Error while getting items by status: " + st, e);
1097
		}
1098
		return itemList;
1099
	}
1100
 
1101
	/**
1102
	 * Creates a new Item object and populates its attributes from thrift item passed as parameter.
1103
	 * Also creates a Map each for VendorItemPricing, VendorItemMapping, SourceItemPricing and SimilarItems and adds these maps to the
1104
	 * new Item object.
1105
	 * @param thriftItem
1106
	 * @param tVendorPricings
1107
	 * @param tVendorMappings
1108
	 * @param tSourceMappings
1109
	 * @param tSimilarItems
1110
	 * @param tVoucherMappings
1111
	 * @param stockPurchaseParams 
1112
	 * @return item object with attributes copied from thrift item object.
1113
	 */
1114
	private Item getItemFromThriftItem(in.shop2020.model.v1.catalog.Item thriftItem, 
1115
			List<in.shop2020.model.v1.inventory.VendorItemPricing> tVendorPricings, 
1116
			List<in.shop2020.model.v1.inventory.VendorItemMapping> tVendorMappings,
1117
			List<in.shop2020.model.v1.catalog.SourceItemPricing> tSourceMappings,
1118
			List<in.shop2020.model.v1.catalog.Item> tSimilarItems, 
1119
			in.shop2020.model.v1.inventory.ItemInventory tItemInventory, 
1120
			List<in.shop2020.model.v1.catalog.VoucherItemMapping> tVoucherMappings, 
1121
			ItemStockPurchaseParams tStockPurchaseParams, Map<Long,String> saleHistory, Long freebieItemId){
1122
 
1123
		Map<String, VendorItemMapping> vItemMap = new HashMap<String, VendorItemMapping>();
1124
		VendorItemMapping vItemMapping;
1125
		if(tVendorMappings != null) {
1126
			for(in.shop2020.model.v1.inventory.VendorItemMapping vim : tVendorMappings) {
1127
				vItemMapping = new VendorItemMapping();
1128
				vItemMapping.setVendorId(vim.getVendorId());
1129
				vItemMapping.setItemKey(vim.getItemKey());
1130
				vItemMap.put(vItemMapping.getVendorId() + Item.KEY_SEPARATOR + vim.getItemKey(), vItemMapping);
1131
			}
1132
		}
1133
 
1134
		Map<Long, VendorPricings> vendorPricingMap = new HashMap<Long, VendorPricings>();
1135
		VendorPricings vPricings;
1136
		if(tVendorPricings != null) {
1137
			for(in.shop2020.model.v1.inventory.VendorItemPricing vip : tVendorPricings) {
1138
				vPricings = new VendorPricings();
1139
				vPricings.setVendorId(vip.getVendorId());
1140
				vPricings.setMop(vip.getMop());
1141
				vPricings.setDealerPrice(vip.getDealerPrice());
1142
				vPricings.setTransferPrice(vip.getTransferPrice());
1143
				vPricings.setNlc(vip.getNlc());
1144
				vendorPricingMap.put(vPricings.getVendorId(), vPricings);
1145
			}
1146
		}
1147
 
1148
		Map<Long, SourcePricings> sourcePricingMap = new HashMap<Long, SourcePricings>();
1149
		SourcePricings sPricings;
1150
		if(tSourceMappings != null) {
1151
			for(in.shop2020.model.v1.catalog.SourceItemPricing sip : tSourceMappings) {
1152
				sPricings = new SourcePricings();
1153
				sPricings.setSourceId(sip.getSourceId());
1154
				sPricings.setMrp(sip.getMrp());
1155
				sPricings.setSellingPrice(sip.getSellingPrice());
1156
				sourcePricingMap.put(sPricings.getSourceId(), sPricings);
1157
			}
1158
		}
1159
 
1160
		Map<Long, Item> SimilarItemslist = new HashMap<Long, Item>();
1161
		Item sItems;
1162
		if(tSimilarItems != null) {
1163
			for(in.shop2020.model.v1.catalog.Item sit : tSimilarItems) {
1164
				sItems = new Item();
1165
				sItems.setCatalogItemId(sit.getCatalogItemId());
1166
				sItems.setProductGroup(sit.getProductGroup());
1167
				sItems.setBrand(sit.getBrand());
1168
				sItems.setModelNumber(sit.getModelNumber());
1169
				sItems.setModelName(sit.getModelName());
1170
				sItems.setContentCategory(CategoryManager.getCategoryManager().getCategoryLabel(sit.getCategory()));
1171
				SimilarItemslist.put(sit.getCatalogItemId(), sItems);
1172
			}
1173
		}
1174
 
1175
		Map<Long, ItemInventory> itemInventoryMap = new HashMap<Long, ItemInventory>();
1176
		ItemInventory warehousedata;
1177
		if(tItemInventory != null) {
1178
			Map<Long, Long> availabilityMap = tItemInventory.getAvailability();
1179
			Map<Long, Long> reservedMap = tItemInventory.getReserved();
1180
			Map<Long, Long> heldMap = tItemInventory.getHeld();
1181
			for(Entry<Long, Long> availability : availabilityMap.entrySet()) {
1182
				Map<Integer, Long> heldInventoryMap = new HashMap<Integer, Long>();
1183
				warehousedata = new ItemInventory();
1184
				warehousedata.setWarehouseId(availability.getKey());
1185
				warehousedata.setAvailability(availability.getValue());
1186
				warehousedata.setReserved(reservedMap.get(availability.getKey()));
1187
				warehousedata.setHeld(heldMap.get(availability.getKey()));
1188
				try {
1189
					if(warehousedata.getHeld()>0) {
1190
						InventoryService.Client inventoryClient = new InventoryClient().getClient();
1191
						heldInventoryMap = inventoryClient.getHeldInventoryMapForItem(thriftItem.getId(), availability.getKey());
1192
					}
1193
					if(heldInventoryMap.size()>0) {
1194
						for(Integer source : heldInventoryMap.keySet()) {
1195
							switch(source) {
1196
							case EBAYSOURCE: warehousedata.setEbayHeld(heldInventoryMap.get(source));
1197
							break;
1198
							case SNAPDEALSOURCE: warehousedata.setSnapdealHeld(heldInventoryMap.get(source));
1199
							break;
1200
							case FLIPKARTSOURCE: warehousedata.setFlipkartHeld(heldInventoryMap.get(source));
1201
							}
1202
						}
1203
					}
1204
				} catch (Exception e) {
1205
					logger.error("Error in getting data from holdInventoryDetail for itemId " + thriftItem.getId() + 
1206
							" and warehouse " +availability.getKey());
1207
				}
1208
				itemInventoryMap.put(warehousedata.getWarehouseId(), warehousedata);
1209
			}
1210
		}
1211
		else {
1212
			itemInventoryMap = null;
1213
		}
1214
 
1215
		Map<String, VoucherItemMapping> voucherMap = new HashMap<String, VoucherItemMapping>();
1216
		VoucherItemMapping voucher;
1217
		if(tVoucherMappings != null) {
1218
			for(in.shop2020.model.v1.catalog.VoucherItemMapping tvoucher : tVoucherMappings) {
1219
				voucher = new VoucherItemMapping(tvoucher.getAmount(), VoucherType.findByValue((int) tvoucher.getVoucherType()).name());
1220
				voucherMap.put(VoucherType.findByValue((int) tvoucher.getVoucherType()).name(), voucher);
1221
			}
1222
		}
1223
 
1224
		in.shop2020.catalog.dashboard.shared.ItemStockPurchaseParams stockPurchaseParams = 
1225
			new in.shop2020.catalog.dashboard.shared.ItemStockPurchaseParams();
1226
		if(tStockPurchaseParams != null) {
1227
			stockPurchaseParams.setItem_id(tStockPurchaseParams.getItem_id());
1228
			stockPurchaseParams.setMinStockLevel(tStockPurchaseParams.getMinStockLevel());
1229
			stockPurchaseParams.setNumOfDaysStock(tStockPurchaseParams.getNumOfDaysStock());
1230
		}
1231
 
1232
		Item item = new Item(thriftItem.getId(),
1233
				thriftItem.getProductGroup(),
1234
				thriftItem.getBrand(),
1235
				thriftItem.getModelNumber(),
1236
				thriftItem.getModelName(),
1237
				thriftItem.getColor(),
1238
				CategoryManager.getCategoryManager().getCategoryLabel(thriftItem.getCategory()),
1239
				thriftItem.getCategory(),
1240
				thriftItem.getComments(),
1241
				thriftItem.getCatalogItemId(),
1242
				thriftItem.getFeatureId(),
1243
				thriftItem.getFeatureDescription(),
1244
				thriftItem.isSetMrp() ? thriftItem.getMrp() : null,
1245
						thriftItem.isSetSellingPrice() ? thriftItem.getSellingPrice() : null,
1246
								thriftItem.isSetWeight() ? thriftItem.getWeight() : null,
1247
										thriftItem.getAddedOn(),
1248
										thriftItem.getStartDate(),
1249
										thriftItem.isSetComingSoonStartDate() ? thriftItem.getComingSoonStartDate() : null ,
1250
												thriftItem.isSetExpectedArrivalDate() ? thriftItem.getExpectedArrivalDate() : null ,
1251
														thriftItem.getRetireDate(),
1252
														thriftItem.getUpdatedOn(),
1253
														thriftItem.getItemStatus().name(),
1254
														thriftItem.getItemStatus().getValue(),
1255
														thriftItem.getStatus_description(),
1256
														thriftItem.getBestDealText(),
1257
														thriftItem.getBestDealsDetailsText(),
1258
														thriftItem.getBestDealsDetailsLink(),
1259
														thriftItem.isSetBestDealValue() ? thriftItem.getBestDealValue() : null,
1260
																thriftItem.isSetBestSellingRank() ? thriftItem.getBestSellingRank() : null,
1261
																		thriftItem.isDefaultForEntity(),
1262
																		thriftItem.isRisky(),
1263
																		thriftItem.isSetExpectedDelay() ? thriftItem.getExpectedDelay() : null,
1264
																				thriftItem.isIsWarehousePreferenceSticky(),
1265
																				thriftItem.isHasItemNo(),
1266
																				ItemType.SERIALIZED.equals(thriftItem.getType()),
1267
																				thriftItem.isSetShowSellingPrice() ? thriftItem.isShowSellingPrice() : false,
1268
																						thriftItem.isHoldOverride(),
1269
																						thriftItem.isSetPreferredVendor() ? thriftItem.getPreferredVendor() : null,
1270
																								thriftItem.isSetPreferredInsurer() ? thriftItem.getPreferredInsurer() : null,		
1271
																										itemInventoryMap,
1272
																										vendorPricingMap,
1273
																										vItemMap,
1274
																										sourcePricingMap,
1275
																										SimilarItemslist,
1276
																										voucherMap, 
1277
																										stockPurchaseParams.getNumOfDaysStock(), 
1278
																										stockPurchaseParams.getMinStockLevel(), 
1279
																										saleHistory, 
1280
																										freebieItemId,
1281
																										thriftItem.getAsin(),
1282
																										thriftItem.getHoldInventory(),
1283
																										thriftItem.getDefaultInventory());
1284
		return item;
1285
	}
1286
 
1287
	/**
1288
	 * 
1289
	 * @return True if push to production count is less than maximum allowed.
1290
	 */
1291
	private boolean canPushToProduction() {
1292
		int count = getPushToProdCount(logFile);
1293
		return count < maxCount;
1294
	}
1295
 
1296
	/**
1297
	 * If this is the first attempt to push to production for current date, returns 0
1298
	 * else reads number of lines from daily rolling log file to get the count.
1299
	 * @return push to production count for current date
1300
	 */
1301
	private int getPushToProdCount(String logfile) {
1302
		// logfile is "/var/log/services/pushToProductionCount/pushToProd.log"
1303
		// this should also be set in log4j.properties
1304
		int lineCount = 0;
1305
		DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
1306
		Date currentDate = Calendar.getInstance().getTime();
1307
		if(pushToProdDate == null ||  !dateFormat.format(pushToProdDate).equals(dateFormat.format(currentDate))) {
1308
			pushToProdDate = currentDate;
1309
			return lineCount;
1310
		}
1311
		try {
1312
			BufferedReader br = new BufferedReader(new FileReader(logfile));
1313
			while (br.readLine() != null) {
1314
				lineCount++;
1315
			}
1316
		} catch (IOException e) {
1317
			logger.error("Error while reading the log file", e);
1318
		}
1319
		return lineCount;
1320
	}
1321
 
4423 phani.kuma 1322
	@Override
1323
	public boolean deleteSimilarItem(long itemId, long catalogItemId) {
1324
		try{
11671 vikram.rag 1325
			CatalogClient catalogServiceClient = new CatalogClient();
1326
			Client catalogClient = catalogServiceClient.getClient();
4423 phani.kuma 1327
 
11671 vikram.rag 1328
			return catalogClient.deleteSimilarItem(itemId, catalogItemId);
4423 phani.kuma 1329
 
11671 vikram.rag 1330
		}catch(Exception e){
1331
			logger.error("Error while deleting the SimilarItems for: " + itemId, e);
1332
		}
1333
		return false;
4423 phani.kuma 1334
	}
1335
 
1336
	@Override
1337
	public Item addSimilarItem(long itemId, long catalogItemId) {
1338
		try{
11671 vikram.rag 1339
			CatalogClient catalogServiceClient = new CatalogClient();
1340
			Client catalogClient = catalogServiceClient.getClient();
1341
			in.shop2020.model.v1.catalog.Item thriftItem = catalogClient.addSimilarItem(itemId, catalogItemId);;
4423 phani.kuma 1342
 
11671 vikram.rag 1343
			return getItemFromThriftItem(thriftItem, null, null, null, null, null, null, null, null, null,null,null);
1344
		}catch(Exception e){
1345
			logger.error("Error while adding the SimilarItems for: " + itemId, e);
1346
		}
1347
		return null;
4423 phani.kuma 1348
	}
4431 phani.kuma 1349
 
1350
	@Override
1351
	public Map<Long, ItemInventory> getProdItemInventory(long itemId) {
1352
		try {
11671 vikram.rag 1353
			// Initialize client for production server
1354
			CatalogClient catalogServiceClient_Prod = new CatalogClient(ConfigClientKeys.catalog_service_server_host_prod.toString(),
1355
					ConfigClientKeys.catalog_service_server_port.toString());
1356
			Client catalogClient_Prod = catalogServiceClient_Prod.getClient();
1357
			InventoryClient inventoryServiceClient = new InventoryClient();
1358
			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
1359
			in.shop2020.model.v1.inventory.ItemInventory thriftItemInventory = inventoryClient.getItemInventoryByItemId(itemId);
1360
 
1361
			Map<Long, ItemInventory> itemInventoryMap = new HashMap<Long, ItemInventory>();
1362
			ItemInventory warehousedata;
1363
			if(thriftItemInventory != null) {
1364
				Map<Long, Long> availabilityMap = thriftItemInventory.getAvailability();
1365
				Map<Long, Long> reservedMap = thriftItemInventory.getReserved();
1366
				Map<Long, Long> heldMap = thriftItemInventory.getHeld();
1367
				for(Entry<Long, Long> availability : availabilityMap.entrySet()) {
1368
					Map<Integer, Long> heldInventoryMap = new HashMap<Integer, Long>();
1369
					warehousedata = new ItemInventory();
1370
					warehousedata.setWarehouseId(availability.getKey());
1371
					warehousedata.setAvailability(availability.getValue());
1372
					warehousedata.setReserved(reservedMap.get(availability.getKey()));
1373
					warehousedata.setHeld(heldMap.get(availability.getKey()));
1374
					try {
1375
						if(warehousedata.getHeld()>0) {
1376
							heldInventoryMap = inventoryClient.getHeldInventoryMapForItem(itemId, availability.getKey());
1377
						}
1378
						if(heldInventoryMap.size()>0) {
1379
							for(Integer source : heldInventoryMap.keySet()) {
1380
								switch(source) {
1381
								case EBAYSOURCE: warehousedata.setEbayHeld(heldInventoryMap.get(source));
1382
								break;
1383
								case SNAPDEALSOURCE: warehousedata.setSnapdealHeld(heldInventoryMap.get(source));
1384
								break;
1385
								case FLIPKARTSOURCE: warehousedata.setFlipkartHeld(heldInventoryMap.get(source));
1386
								}
1387
							}
1388
						} 
1389
					}catch (Exception e) {
1390
						logger.error("Error in getting data from holdInventoryDetail for itemId " + itemId + 
1391
								" and warehouse " +availability.getKey());
1392
					}
1393
					itemInventoryMap.put(warehousedata.getWarehouseId(), warehousedata);
1394
				}
1395
			}
1396
			else {
1397
				itemInventoryMap = null;
1398
			}
1399
			return itemInventoryMap;
1400
		} catch (Exception e) {
1401
			logger.error("Error while updating item's risky flag on staging", e);
1402
		}
4431 phani.kuma 1403
		return null;
1404
	}
4649 phani.kuma 1405
 
1406
	@Override
1407
	public boolean addAuthorizationLog(long itemId, String username, String message) {
1408
		try{
11671 vikram.rag 1409
			CatalogClient catalogServiceClient = new CatalogClient();
1410
			Client catalogClient = catalogServiceClient.getClient();
4649 phani.kuma 1411
 
11671 vikram.rag 1412
			return catalogClient.addAuthorizationLog(itemId, username, message);
4649 phani.kuma 1413
 
11671 vikram.rag 1414
		}catch(Exception e){
1415
			logger.error("Error while adding the event for: " + itemId, e);
1416
		}
4649 phani.kuma 1417
		return false;
1418
	}
1419
 
1420
	@Override
1421
	public Map<String, String> getConfigdataforPriceCompare() {
1422
		Map<String, String> ConfigMap = new HashMap<String, String>();
1423
		try {
1424
			ConfigMap.put("courier_cost_factor", ConfigClient.getClient().get(ConfigClientKeys.courier_cost_factor.toString()));
11671 vikram.rag 1425
			ConfigMap.put("courier_weight_factor", ConfigClient.getClient().get(ConfigClientKeys.courier_weight_factor.toString()));
1426
			ConfigMap.put("breakeven_divisor", ConfigClient.getClient().get(ConfigClientKeys.breakeven_divisor.toString()));
1427
			ConfigMap.put("breakeven_additon_factor", ConfigClient.getClient().get(ConfigClientKeys.breakeven_additon_factor.toString()));
1428
			ConfigMap.put("transfer_price_percentage", ConfigClient.getClient().get(ConfigClientKeys.transfer_price_percentage.toString()));
1429
			ConfigMap.put("transfer_price_factor", ConfigClient.getClient().get(ConfigClientKeys.transfer_price_factor.toString()));
1430
		} catch(ConfigException ce) {
1431
			logger.error("Unable to connect to the config server. Setting sensible defaults.", ce);
1432
			ConfigMap.put("courier_cost_factor", "60");
1433
			ConfigMap.put("courier_weight_factor", "500");
1434
			ConfigMap.put("breakeven_divisor", "0.98");
1435
			ConfigMap.put("breakeven_additon_factor", "50");
1436
			ConfigMap.put("transfer_price_percentage", "2");
1437
			ConfigMap.put("transfer_price_factor", "50");
1438
		}
4649 phani.kuma 1439
		return ConfigMap;
1440
	}
4957 phani.kuma 1441
 
1442
	@Override
1443
	public List<String> getAllCategories() {
1444
		List<String> categoryList = new ArrayList<String>();
1445
		List<Long> parentCategoryIDs = Arrays.asList(new Long[] {(long) 0,(long) 10001,(long) 10009,(long) 10049});
11671 vikram.rag 1446
		try {
1447
			CatalogClient catalogServiceClient = new CatalogClient();
1448
			Client catalogClient = catalogServiceClient.getClient();
4957 phani.kuma 1449
 
11671 vikram.rag 1450
			List<in.shop2020.model.v1.catalog.Category> categories = catalogClient.getAllCategories();
4957 phani.kuma 1451
 
11671 vikram.rag 1452
			for(in.shop2020.model.v1.catalog.Category category : categories) {
1453
				if(!parentCategoryIDs.contains(category.getParent_category_id())){
1454
					categoryList.add(category.getDisplay_name());
1455
				}
1456
				else{
1457
					continue;
1458
				}
1459
			}
1460
		} catch (Exception e) {
1461
			logger.error("Error while getting all the categories: ", e);
1462
		}
1463
		return categoryList;
4957 phani.kuma 1464
	}
1465
 
1466
	@Override
1467
	public List<String> getAllBrands() {
1468
		List<String> brandsList = new ArrayList<String>();
11671 vikram.rag 1469
		try {
1470
			CatalogClient catalogServiceClient = new CatalogClient();
1471
			Client catalogClient = catalogServiceClient.getClient();
4957 phani.kuma 1472
 
11671 vikram.rag 1473
			brandsList = catalogClient.getAllBrands();
1474
		} catch (Exception e) {
1475
			logger.error("Error while getting all the categories: ", e);
1476
		}
1477
		return brandsList;
4957 phani.kuma 1478
	}
5427 amit.gupta 1479
 
5504 phani.kuma 1480
	@Override
5516 phani.kuma 1481
	public boolean deleteVoucher(Long catalogItemId, Long voucherType) {
5504 phani.kuma 1482
		try{
11671 vikram.rag 1483
			CatalogClient catalogServiceClient = new CatalogClient();
1484
			Client catalogClient = catalogServiceClient.getClient();
5504 phani.kuma 1485
 
11671 vikram.rag 1486
			return catalogClient.deleteVoucherForItem(catalogItemId, voucherType);
5504 phani.kuma 1487
 
11671 vikram.rag 1488
		}catch(Exception e){
1489
			logger.error("Error while deleting the Voucher for: " + catalogItemId, e);
1490
		}
1491
		return false;
5504 phani.kuma 1492
	}
1493
 
1494
	@Override
5516 phani.kuma 1495
	public boolean addVoucher(Long catalogItemId, Long voucherType, long voucherAmount) {
5504 phani.kuma 1496
		try{
11671 vikram.rag 1497
			CatalogClient catalogServiceClient = new CatalogClient();
1498
			Client catalogClient = catalogServiceClient.getClient();
5504 phani.kuma 1499
 
11671 vikram.rag 1500
			return catalogClient.addupdateVoucherForItem(catalogItemId, voucherType, voucherAmount);
5504 phani.kuma 1501
 
11671 vikram.rag 1502
		}catch(Exception e){
1503
			logger.error("Error while adding the Voucher for: " + catalogItemId, e);
1504
		}
5504 phani.kuma 1505
		return false;
1506
	}
1507
	@Override
5516 phani.kuma 1508
	public Map<Long, String> getvoucherTypes() {
1509
		Map<Long, String> voucherType = new HashMap<Long, String>();
5504 phani.kuma 1510
		for(VoucherType voucher : VoucherType.values())
1511
		{
5516 phani.kuma 1512
			voucherType.put((long) voucher.getValue(), voucher.name());
5504 phani.kuma 1513
		}
1514
		return voucherType;
1515
	}
1516
 
5586 phani.kuma 1517
	@Override
1518
	public boolean getConfigforentityIdMandatory() {
1519
		try {
1520
			String entityId_mandatory = ConfigClient.getClient().get(ConfigClientKeys.entityId_mandatory.toString());
1521
			if (entityId_mandatory.equals("TRUE")) {
1522
				return true;
1523
			}
11671 vikram.rag 1524
		} catch(ConfigException ce) {
1525
			logger.error("Unable to connect to the config server. Setting sensible defaults.", ce);
1526
		}
5586 phani.kuma 1527
		return false;
1528
	}
1529
 
1530
	@Override
1531
	public boolean checkEntityId(long entityId) {
1532
		try {
11671 vikram.rag 1533
			CatalogClient catalogServiceClient = new CatalogClient(ConfigClientKeys.catalog_service_server_host_master.toString(), ConfigClientKeys.catalog_service_server_port.toString());
1534
			Client catalogClient = catalogServiceClient.getClient();
1535
			return catalogClient.isValidCatalogItemId(entityId);
1536
		} catch (Exception e) {
1537
			logger.error("Error while checking for a Catalog Item Id: ", e);
1538
		}
5586 phani.kuma 1539
		return false;
1540
	}
1541
 
6096 amit.gupta 1542
	@Override
1543
	public String updateExpectedDelayOnProd(Item item) {
1544
		try{
11671 vikram.rag 1545
			CatalogClient catalogServiceClient_Prod = new CatalogClient( 
1546
					ConfigClientKeys.catalog_service_server_host_prod.toString(),
1547
					ConfigClientKeys.catalog_service_server_port.toString());
6096 amit.gupta 1548
 
11671 vikram.rag 1549
			Client catalogClient_Prod = catalogServiceClient_Prod.getClient();
6096 amit.gupta 1550
 
11671 vikram.rag 1551
 
1552
			in.shop2020.model.v1.catalog.Item tItem = catalogClient_Prod.getItem(item.getId());
1553
			if(item.getExpectedDelay() != null) {
1554
				tItem.setExpectedDelay(item.getExpectedDelay());
1555
				if(item.isItemType()) {
1556
					tItem.setType(ItemType.SERIALIZED);
1557
				}
1558
				else {
1559
					tItem.setType(ItemType.NON_SERIALIZED);
1560
				}
1561
				long rItemId;
1562
				if((rItemId = catalogClient_Prod.updateItem(tItem)) != item.getId()) {
1563
					logger.error("Error updating item on production, returned Item Id: " + rItemId);
1564
					return "Error updating expected delay on production";
1565
				}
1566
				InventoryClient inventoryServiceClient= new InventoryClient();
1567
				InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
1568
				inventoryClient.clearItemAvailabilityCacheForItem(rItemId);
1569
				logger.info("Successfully updated item: " + item.getId());
1570
				return "Expected delay successfully updated on prod"; 
1571
			} else {
1572
				return "Error:expected delay should not be null";
1573
			}
1574
		} catch (Exception e) {
1575
			logger.error("Error while updating expected delay on production", e);
1576
			return "Error while updating expected delay on production";
1577
		}
6096 amit.gupta 1578
	}
1579
 
6838 vikram.rag 1580
	@Override
1581
	public Map<Long, String> getAllInsurers() {
11671 vikram.rag 1582
		Map<Long, String> insurersMap = new HashMap<Long, String>();
1583
		try {
1584
			CatalogClient catalogServiceClient = new CatalogClient();
1585
			in.shop2020.model.v1.catalog.CatalogService.Client catalogClient = catalogServiceClient.getClient();
6096 amit.gupta 1586
 
11671 vikram.rag 1587
			List<Insurer> insurers = catalogClient.getAllInsurers();
1588
 
1589
			for(in.shop2020.model.v1.catalog.Insurer i : insurers) {
1590
				insurersMap.put(i.getId(), i.getName());
1591
			}
1592
		} catch (Exception e) {
1593
			logger.error("Error while getting all the vendors: ", e);
1594
		}
1595
		return insurersMap;
6838 vikram.rag 1596
	}
11671 vikram.rag 1597
 
10484 vikram.rag 1598
	private Item getItemFromThriftItem(in.shop2020.model.v1.catalog.Item thriftItem, 
11671 vikram.rag 1599
			List<in.shop2020.model.v1.inventory.VendorItemPricing> tVendorPricings, 
1600
			List<in.shop2020.model.v1.inventory.VendorItemMapping> tVendorMappings,
1601
			List<in.shop2020.model.v1.catalog.SourceItemPricing> tSourceMappings,
1602
			List<in.shop2020.model.v1.catalog.Item> tSimilarItems, 
1603
			in.shop2020.model.v1.inventory.ItemInventory tItemInventory, 
1604
			List<in.shop2020.model.v1.catalog.VoucherItemMapping> tVoucherMappings, 
1605
			ItemStockPurchaseParams tStockPurchaseParams, Map<Long,String> saleHistory, Long freebieItemId,Map<String,String> stateNameVatPercentageMap,in.shop2020.model.v1.catalog.PrivateDeal tPrivateDeal){
6838 vikram.rag 1606
 
11671 vikram.rag 1607
		Map<String, VendorItemMapping> vItemMap = new HashMap<String, VendorItemMapping>();
1608
		VendorItemMapping vItemMapping;
1609
		if(tVendorMappings != null) {
1610
			for(in.shop2020.model.v1.inventory.VendorItemMapping vim : tVendorMappings) {
1611
				vItemMapping = new VendorItemMapping();
1612
				vItemMapping.setVendorId(vim.getVendorId());
1613
				vItemMapping.setItemKey(vim.getItemKey());
1614
				vItemMap.put(vItemMapping.getVendorId() + Item.KEY_SEPARATOR + vim.getItemKey(), vItemMapping);
1615
			}
1616
		}
6838 vikram.rag 1617
 
11671 vikram.rag 1618
		Map<Long, VendorPricings> vendorPricingMap = new HashMap<Long, VendorPricings>();
1619
		VendorPricings vPricings;
1620
		if(tVendorPricings != null) {
1621
			for(in.shop2020.model.v1.inventory.VendorItemPricing vip : tVendorPricings) {
1622
				vPricings = new VendorPricings();
1623
				vPricings.setVendorId(vip.getVendorId());
1624
				vPricings.setMop(vip.getMop());
1625
				vPricings.setDealerPrice(vip.getDealerPrice());
1626
				vPricings.setTransferPrice(vip.getTransferPrice());
1627
				vPricings.setNlc(vip.getNlc());
1628
				vendorPricingMap.put(vPricings.getVendorId(), vPricings);
1629
			}
1630
		}
6096 amit.gupta 1631
 
11671 vikram.rag 1632
		Map<Long, SourcePricings> sourcePricingMap = new HashMap<Long, SourcePricings>();
1633
		SourcePricings sPricings;
1634
		if(tSourceMappings != null) {
1635
			for(in.shop2020.model.v1.catalog.SourceItemPricing sip : tSourceMappings) {
1636
				sPricings = new SourcePricings();
1637
				sPricings.setSourceId(sip.getSourceId());
1638
				sPricings.setMrp(sip.getMrp());
1639
				sPricings.setSellingPrice(sip.getSellingPrice());
1640
				sourcePricingMap.put(sPricings.getSourceId(), sPricings);
1641
			}
1642
		}
10484 vikram.rag 1643
 
11671 vikram.rag 1644
		Map<Long, Item> SimilarItemslist = new HashMap<Long, Item>();
1645
		Item sItems;
1646
		if(tSimilarItems != null) {
1647
			for(in.shop2020.model.v1.catalog.Item sit : tSimilarItems) {
1648
				sItems = new Item();
1649
				sItems.setCatalogItemId(sit.getCatalogItemId());
1650
				sItems.setProductGroup(sit.getProductGroup());
1651
				sItems.setBrand(sit.getBrand());
1652
				sItems.setModelNumber(sit.getModelNumber());
1653
				sItems.setModelName(sit.getModelName());
1654
				sItems.setContentCategory(CategoryManager.getCategoryManager().getCategoryLabel(sit.getCategory()));
1655
				SimilarItemslist.put(sit.getCatalogItemId(), sItems);
1656
			}
1657
		}
1658
 
1659
		Map<Long, ItemInventory> itemInventoryMap = new HashMap<Long, ItemInventory>();
1660
		ItemInventory warehousedata;
1661
		if(tItemInventory != null) {
1662
			Map<Long, Long> availabilityMap = tItemInventory.getAvailability();
1663
			Map<Long, Long> reservedMap = tItemInventory.getReserved();
1664
			Map<Long, Long> heldMap = tItemInventory.getHeld();
1665
			for(Entry<Long, Long> availability : availabilityMap.entrySet()) {
1666
				Map<Integer, Long> heldInventoryMap = new HashMap<Integer, Long>();
1667
				warehousedata = new ItemInventory();
1668
				warehousedata.setWarehouseId(availability.getKey());
1669
				warehousedata.setAvailability(availability.getValue());
1670
				warehousedata.setReserved(reservedMap.get(availability.getKey()));
1671
				warehousedata.setHeld(heldMap.get(availability.getKey()));
1672
				try {
1673
					if(warehousedata.getHeld()>0) {
1674
						InventoryService.Client inventoryClient = new InventoryClient().getClient();
1675
						heldInventoryMap = inventoryClient.getHeldInventoryMapForItem(thriftItem.getId(), availability.getKey());
1676
					}
1677
					if(heldInventoryMap.size()>0) {
1678
						for(Integer source : heldInventoryMap.keySet()) {
1679
							switch(source) {
1680
							case EBAYSOURCE: warehousedata.setEbayHeld(heldInventoryMap.get(source));
1681
							break;
1682
							case SNAPDEALSOURCE: warehousedata.setSnapdealHeld(heldInventoryMap.get(source));
1683
							break;
1684
							case FLIPKARTSOURCE: warehousedata.setFlipkartHeld(heldInventoryMap.get(source));
1685
							}
1686
						}
1687
					}
1688
				} catch (Exception e) {
1689
					logger.error("Error in getting data from holdInventoryDetail for itemId " + thriftItem.getId() + 
1690
							" and warehouse " +availability.getKey());
1691
				}
1692
				itemInventoryMap.put(warehousedata.getWarehouseId(), warehousedata);
1693
			}
1694
		}
1695
		else {
1696
			itemInventoryMap = null;
1697
		}
1698
 
1699
		Map<String, VoucherItemMapping> voucherMap = new HashMap<String, VoucherItemMapping>();
1700
		VoucherItemMapping voucher;
1701
		if(tVoucherMappings != null) {
1702
			for(in.shop2020.model.v1.catalog.VoucherItemMapping tvoucher : tVoucherMappings) {
1703
				voucher = new VoucherItemMapping(tvoucher.getAmount(), VoucherType.findByValue((int) tvoucher.getVoucherType()).name());
1704
				voucherMap.put(VoucherType.findByValue((int) tvoucher.getVoucherType()).name(), voucher);
1705
			}
1706
		}
1707
 
1708
		in.shop2020.catalog.dashboard.shared.ItemStockPurchaseParams stockPurchaseParams = 
1709
			new in.shop2020.catalog.dashboard.shared.ItemStockPurchaseParams();
1710
		if(tStockPurchaseParams != null) {
1711
			stockPurchaseParams.setItem_id(tStockPurchaseParams.getItem_id());
1712
			stockPurchaseParams.setMinStockLevel(tStockPurchaseParams.getMinStockLevel());
1713
			stockPurchaseParams.setNumOfDaysStock(tStockPurchaseParams.getNumOfDaysStock());
1714
		}
1715
		in.shop2020.catalog.dashboard.shared.PrivateDeal privateDeal=null;
1716
		if(tPrivateDeal!=null){
1717
			privateDeal= new in.shop2020.catalog.dashboard.shared.PrivateDeal();
1718
			privateDeal.setDealFreebieItemId(tPrivateDeal.getDealFreebieItemId());
1719
			privateDeal.setItem_id(tPrivateDeal.getItem_id());
1720
			privateDeal.setDealPrice(tPrivateDeal.getDealPrice());
1721
			privateDeal.setDealFreebieItemId(tPrivateDeal.getDealFreebieItemId());
1722
			if(tPrivateDeal.isSetStartDate()){
1723
				privateDeal.setStartDate(tPrivateDeal.getStartDate());
1724
			}
1725
			else{
1726
				privateDeal.setStartDate(null);
1727
			}
1728
			if(tPrivateDeal.isSetEndDate()){
1729
				privateDeal.setEndDate(tPrivateDeal.getEndDate());
1730
			}
1731
			else{
1732
				privateDeal.setEndDate(null);
1733
			}
1734
			privateDeal.setDealTextOption(tPrivateDeal.getDealTextOption());
1735
			privateDeal.setRank(tPrivateDeal.getRank());
1736
			privateDeal.setCod(tPrivateDeal.isIsCod());
1737
			privateDeal.setDealFreebieOption(tPrivateDeal.getDealFreebieOption());
1738
			if(tPrivateDeal.getDealText()!=null){
1739
				privateDeal.setDealText(tPrivateDeal.getDealText());
1740
			}
1741
			else{
1742
				privateDeal.setDealText("");
1743
			}
1744
 
1745
			privateDeal.setActive(tPrivateDeal.isIsActive());
1746
		}
1747
		Item item = new Item(thriftItem.getId(),
1748
				thriftItem.getProductGroup(),
1749
				thriftItem.getBrand(),
1750
				thriftItem.getModelNumber(),
1751
				thriftItem.getModelName(),
1752
				thriftItem.getColor(),
1753
				CategoryManager.getCategoryManager().getCategoryLabel(thriftItem.getCategory()),
1754
				thriftItem.getCategory(),
1755
				thriftItem.getComments(),
1756
				thriftItem.getCatalogItemId(),
1757
				thriftItem.getFeatureId(),
1758
				thriftItem.getFeatureDescription(),
1759
				thriftItem.isSetMrp() ? thriftItem.getMrp() : null,
1760
						thriftItem.isSetSellingPrice() ? thriftItem.getSellingPrice() : null,
1761
								thriftItem.isSetWeight() ? thriftItem.getWeight() : null,
1762
										thriftItem.getAddedOn(),
1763
										thriftItem.getStartDate(),
1764
										thriftItem.isSetComingSoonStartDate() ? thriftItem.getComingSoonStartDate() : null ,
1765
												thriftItem.isSetExpectedArrivalDate() ? thriftItem.getExpectedArrivalDate() : null ,
1766
														thriftItem.getRetireDate(),
1767
														thriftItem.getUpdatedOn(),
1768
														thriftItem.getItemStatus().name(),
1769
														thriftItem.getItemStatus().getValue(),
1770
														thriftItem.getStatus_description(),
1771
														thriftItem.getBestDealText(),
1772
														thriftItem.getBestDealsDetailsText(),
1773
														thriftItem.getBestDealsDetailsLink(),
1774
														thriftItem.isSetBestDealValue() ? thriftItem.getBestDealValue() : null,
1775
																thriftItem.isSetBestSellingRank() ? thriftItem.getBestSellingRank() : null,
1776
																		thriftItem.isDefaultForEntity(),
1777
																		thriftItem.isRisky(),
1778
																		thriftItem.isSetExpectedDelay() ? thriftItem.getExpectedDelay() : null,
1779
																				thriftItem.isIsWarehousePreferenceSticky(),
1780
																				thriftItem.isHasItemNo(),
1781
																				ItemType.SERIALIZED.equals(thriftItem.getType()),
1782
																				thriftItem.isSetShowSellingPrice() ? thriftItem.isShowSellingPrice() : false,
1783
																						thriftItem.isHoldOverride(),
1784
																						thriftItem.isSetPreferredVendor() ? thriftItem.getPreferredVendor() : null,
1785
																								thriftItem.isSetPreferredInsurer() ? thriftItem.getPreferredInsurer() : null,		
1786
																										itemInventoryMap,
1787
																										vendorPricingMap,
1788
																										vItemMap,
1789
																										sourcePricingMap,
1790
																										SimilarItemslist,
1791
																										voucherMap, 
1792
																										stockPurchaseParams.getNumOfDaysStock(), 
1793
																										stockPurchaseParams.getMinStockLevel(), 
1794
																										saleHistory, 
1795
																										freebieItemId,
1796
																										thriftItem.getAsin(),
1797
																										thriftItem.getHoldInventory(),
1798
																										thriftItem.getDefaultInventory(),stateNameVatPercentageMap,privateDeal);
1799
		return item;
1800
	}
6530 vikram.rag 1801
}