Subversion Repositories SmartDukaan

Rev

Rev 11671 | Rev 11976 | 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
			Map<Long, VendorPricings> vendorPricings = item.getVendorPricesMap();
659
			if(vendorPricings != null && !vendorPricings.isEmpty()) {
660
				in.shop2020.model.v1.inventory.VendorItemPricing tVendorPricing;
661
				for(VendorPricings v : vendorPricings.values()) {
662
					tVendorPricing = new in.shop2020.model.v1.inventory.VendorItemPricing();
663
					tVendorPricing.setVendorId(v.getVendorId());
664
					tVendorPricing.setItemId(itemId);
665
					tVendorPricing.setMop(v.getMop());
666
					tVendorPricing.setTransferPrice(v.getTransferPrice());
667
					tVendorPricing.setNlc(v.getNlc());
668
					tVendorPricing.setDealerPrice(v.getDealerPrice());
669
					inventoryClient.addVendorItemPricing(tVendorPricing);
670
				}
671
			}
2359 ankur.sing 672
 
11671 vikram.rag 673
			Map<String, VendorItemMapping> vendorKeysMap = item.getVendorKeysMap();
674
			if(vendorKeysMap != null && !vendorKeysMap.isEmpty()) {
675
				in.shop2020.model.v1.inventory.VendorItemMapping tVendorMapping;
676
				for(Entry<String, VendorItemMapping> e : vendorKeysMap.entrySet()) {
677
					tVendorMapping = new in.shop2020.model.v1.inventory.VendorItemMapping();
678
					VendorItemMapping v = e.getValue();
679
					tVendorMapping.setVendorId(v.getVendorId());
680
					tVendorMapping.setItemKey(v.getItemKey());
681
					tVendorMapping.setItemId(itemId);
682
					inventoryClient.addVendorItemMapping(e.getKey().substring(e.getKey().indexOf(Item.KEY_SEPARATOR)+1), tVendorMapping);
683
				}
684
			}
2359 ankur.sing 685
 
11671 vikram.rag 686
			inventoryClient.updateItemStockPurchaseParams(itemId, item.getNumOfDaysStock(),
687
					item.getMinStockLevel());
7291 vikram.rag 688
 
11671 vikram.rag 689
			if(item.getFreebieItemId()!=null && item.getFreebieItemId()!=0) {
690
				in.shop2020.model.v1.catalog.FreebieItem freebieItem = 
691
					new in.shop2020.model.v1.catalog.FreebieItem();
692
				freebieItem.setItemId(itemId);
693
				freebieItem.setFreebieItemId(item.getFreebieItemId());
694
				catalogClient.addOrUpdateFreebieForItem(freebieItem);
695
			}
5217 amit.gupta 696
 
11671 vikram.rag 697
		} catch (Exception e) {
698
			logger.error("Error while adding an item: ", e);
699
		}
700
		return itemId;
701
	}
2126 ankur.sing 702
 
11671 vikram.rag 703
	@Override
704
	public long checkSimilarItem(String brand, String modelNumber, String modelName, String color) {
2359 ankur.sing 705
 
11671 vikram.rag 706
		try {
707
			CatalogClient catalogServiceClient = new CatalogClient();
708
			Client catalogClient = catalogServiceClient.getClient();
709
			return catalogClient.checkSimilarItem(brand, modelNumber, modelName, color);
710
		} catch (Exception e) {
711
			logger.error("Error while checking for a similar item: ", e);
712
		}
713
		return 0;
714
	}
2359 ankur.sing 715
 
11671 vikram.rag 716
	private void setThriftItemParams(in.shop2020.model.v1.catalog.Item tItem, Item item) {
717
		tItem.setId(tItem.getId());
718
		tItem.setProductGroup(item.getProductGroup());
719
		tItem.setBrand(item.getBrand());
720
		tItem.setModelName(item.getModelName());
721
		tItem.setModelNumber(item.getModelNumber());
722
		tItem.setColor(item.getColor());
723
		tItem.setShowSellingPrice(item.isShowSellingPrice());
724
		tItem.setHoldOverride(item.isHoldOverride());
725
		tItem.setStatus_description(item.getItemStatusDesc());
726
		tItem.setComments(item.getComments());
2126 ankur.sing 727
 
11671 vikram.rag 728
		if(item.getMrp() != null) {
729
			tItem.setMrp(item.getMrp());
730
		}
2359 ankur.sing 731
 
11671 vikram.rag 732
		if(item.getCatalogItemId() != null) {
733
			tItem.setCatalogItemId(item.getCatalogItemId());
734
		}
2359 ankur.sing 735
 
11671 vikram.rag 736
		if(item.getSellingPrice() != null) {
737
			tItem.setSellingPrice(item.getSellingPrice());
738
		}
2359 ankur.sing 739
 
11671 vikram.rag 740
		if(item.getWeight() != null) {
741
			tItem.setWeight(item.getWeight());
742
		}
2359 ankur.sing 743
 
11671 vikram.rag 744
		if(item.getExpectedDelay() != null) {
745
			tItem.setExpectedDelay(item.getExpectedDelay());
746
		}
2359 ankur.sing 747
 
11671 vikram.rag 748
		tItem.setIsWarehousePreferenceSticky(item.isWarehouseStickiness());
2359 ankur.sing 749
 
11671 vikram.rag 750
		if(item.getPreferredVendor() != null) {
751
			tItem.setPreferredVendor(item.getPreferredVendor());
752
		}
753
		tItem.setPreferredInsurer(item.getPreferredInsurer());
2359 ankur.sing 754
 
11671 vikram.rag 755
		if(item.getAsin() != null) {
756
			tItem.setAsin(item.getAsin());
757
		}
758
		if(item.getHoldInventory()!= null) {
759
			tItem.setHoldInventory(item.getHoldInventory());
760
		}
761
		else{
762
			tItem.setHoldInventory(0);
763
		}	
764
		if(item.getDefaultInventory()!=null){
765
			tItem.setDefaultInventory(item.getDefaultInventory());
766
		}
767
		else{
768
			tItem.setDefaultInventory(0);
769
		}
770
		tItem.setBestDealText(item.getBestDealsText());
771
		tItem.setBestDealsDetailsText(item.getBestDealsDetailsText());
772
		tItem.setBestDealsDetailsLink(item.getBestDealsDetailsLink());
773
		if(item.getBestDealsValue() != null) {
774
			tItem.setBestDealValue(item.getBestDealsValue());
775
		}
2359 ankur.sing 776
 
11671 vikram.rag 777
		if(item.getBestSellingRank() != null) {
778
			tItem.setBestSellingRank(item.getBestSellingRank());
779
		}
2359 ankur.sing 780
 
11671 vikram.rag 781
		tItem.setDefaultForEntity(item.isDefaultForEntity());
782
		tItem.setRisky(item.isRisky());
783
		tItem.setHasItemNo(item.isHasItemNo());
2359 ankur.sing 784
 
11671 vikram.rag 785
		if(item.isItemType()) {
786
			tItem.setType(ItemType.SERIALIZED);
787
		}
788
		else {
789
			tItem.setType(ItemType.NON_SERIALIZED);
790
		}
791
 
792
		if(item.getStartDate() != null) {
793
			tItem.setStartDate(item.getStartDate());
794
		}
795
 
796
		if(item.getExpectedArrivalDate() != null) {
797
			tItem.setExpectedArrivalDate(item.getExpectedArrivalDate());
798
		} else {
799
			tItem.unsetComingSoonStartDate();
800
			tItem.unsetExpectedArrivalDate();
801
			if(status.COMING_SOON.equals(tItem.getItemStatus())){
802
				tItem.setItemStatus(status.CONTENT_COMPLETE);
803
				tItem.setStatus_description("Content generation completed");
804
			}
805
		}
806
 
807
		if(item.getComingSoonStartDate() != null) {
808
			tItem.setComingSoonStartDate(item.getComingSoonStartDate());
809
		} else {
810
			tItem.unsetComingSoonStartDate();
811
		}
812
 
813
		if(item.getRetireDate() != null) {
814
			tItem.setRetireDate(item.getRetireDate());
815
		}
816
 
817
		tItem.setUpdatedOn(Calendar.getInstance().getTimeInMillis());
818
	}
819
 
820
	@Override
821
	public void pauseItem(long itemId) {
822
		try {
823
			CatalogClient catalogServiceClient = new CatalogClient();
824
			Client catalogClient = catalogServiceClient.getClient();
825
 
826
			catalogClient.changeItemStatus(itemId, Calendar.getInstance().getTimeInMillis(), status.PAUSED);
827
		} catch (Exception e) {
828
			logger.error("Error while pausing the item: " + itemId, e);
829
		}
830
 
831
	}
832
 
833
	@Override
834
	public void markInProcess(long itemId) {
835
		try {
836
			CatalogClient catalogServiceClient = new CatalogClient();
837
			Client catalogClient = catalogServiceClient.getClient();
838
 
839
			catalogClient.changeItemStatus(itemId, Calendar.getInstance().getTimeInMillis(), status.IN_PROCESS);
840
		} catch (Exception e) {
841
			logger.error("Error while marking in-process the item: " + itemId, e);
842
		}
843
	}
844
 
845
	@Override
846
	public void phaseoutItem(long itemId) {
847
		try {
848
			CatalogClient catalogServiceClient = new CatalogClient();
849
			Client catalogClient = catalogServiceClient.getClient();
850
 
851
			catalogClient.changeItemStatus(itemId, Calendar.getInstance().getTimeInMillis(), status.PHASED_OUT);
852
		} catch (Exception e) {
853
			logger.error("Error while phasing out the item: " + itemId, e);
854
		}
855
	}
856
 
857
	@Override
858
	public void activateItem(long itemId) {
859
		try {
860
			CatalogClient catalogServiceClient = new CatalogClient();
861
			Client catalogClient = catalogServiceClient.getClient();
862
 
863
			catalogClient.changeItemStatus(itemId, Calendar.getInstance().getTimeInMillis(), status.ACTIVE);
864
		} catch (Exception e) {
865
			logger.error("Error while activating the item: " + itemId, e);
866
		}
867
	}
868
 
869
	@Override
870
	public boolean changeItemRiskyFlag(long itemId, boolean risky) {
871
		try {
872
			logger.info("Updating risky flag for item id: " + itemId + " to " + risky);
873
			// Initialize client for staging server
874
			CatalogClient catalogServiceClient = new CatalogClient();
875
			Client catalogClient = catalogServiceClient.getClient();
876
 
877
			// Initialize client for production server
878
			CatalogClient catalogServiceClient_Prod = new CatalogClient(ConfigClientKeys.catalog_service_server_host_prod.toString(),
879
					ConfigClientKeys.catalog_service_server_port.toString());
880
			Client catalogClient_Prod = catalogServiceClient_Prod.getClient();
881
			catalogClient.changeItemRiskyFlag(itemId, risky);
882
 
883
			try{
884
				catalogClient_Prod.changeItemRiskyFlag(itemId, risky);
885
			}catch(Exception e){
886
				logger.error("Error while updating item's risky flag on production", e);
887
				// If not able to change risky flag on production, revert on staging and return false (to show error to user).
888
				catalogClient.changeItemRiskyFlag(itemId, !risky);        
889
				return false;
890
			}
891
		} catch (Exception e) {
892
			logger.error("Error while updating item's risky flag on staging", e);
893
			return false;
894
		}
895
		return true;
896
	}
897
 
898
 
899
	/**
900
	 * Retuns list of Items filtered by category (column is product_group in catalog.item table)
901
	 * This list is used to generate master sheet (excel sheet)
902
	 * @param category
903
	 * @param brand
904
	 * @return
905
	 */
906
	public List<Item> getItemsForMasterSheet(String category, String brand) {
907
		List<Item> itemList = new ArrayList<Item>();
908
		try {
909
			CatalogClient catalogServiceClient = new CatalogClient();
910
			Client catalogClient = catalogServiceClient.getClient();
911
			InventoryClient inventoryServiceClient = new InventoryClient();
912
			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
913
 
914
			List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getItemsForMasterSheet(category, brand);
915
 
916
			for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
5946 rajveer 917
				List<in.shop2020.model.v1.inventory.VendorItemPricing> vip = inventoryClient.getAllItemPricing(thriftItem.getId());
918
				List<in.shop2020.model.v1.inventory.VendorItemMapping> vim = inventoryClient.getVendorItemMappings(thriftItem.getId());
5706 amit.gupta 919
				List<in.shop2020.model.v1.catalog.SourceItemPricing> sip = catalogClient.getAllSourcePricing(thriftItem.getId());
11671 vikram.rag 920
				itemList.add(getItemFromThriftItem(thriftItem, vip, vim, sip, null, null, null, null, null, null));
921
			}
922
		} catch (Exception e) {
923
			logger.error("Error while getting items by category: " + category, e);
924
		}
925
		Collections.sort(itemList, new ItemsComparator());
926
		return itemList;
927
	}
928
 
929
	@Override
930
	public String updateItemOnProduction(Item item) {
931
		if(!canPushToProduction()) {
932
			// If we can't push to production, then return that message to user
933
			// else move forward with update.
934
			return "Maximum push to production count reached for today";
935
		}
936
		List<Long> itemIds = item.getSameItemsWithDifferentColors();
937
		List<Item> items = new ArrayList<Item>();
938
		items.add(item);
939
		for(Long itemId : itemIds) {
940
			try {
941
				CatalogClient catalogServiceClient = new CatalogClient();
942
				Client catalogClient = catalogServiceClient.getClient();
943
				InventoryClient inventoryServiceClient = new InventoryClient();
944
				in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
945
 
946
				in.shop2020.model.v1.catalog.Item thriftItem = catalogClient.getItem(itemId);
947
				List<in.shop2020.model.v1.inventory.VendorItemPricing> vip = inventoryClient.getAllItemPricing(thriftItem.getId());
948
				List<in.shop2020.model.v1.inventory.VendorItemMapping> vim = inventoryClient.getVendorItemMappings(thriftItem.getId());
949
				List<in.shop2020.model.v1.catalog.SourceItemPricing> sip = catalogClient.getAllSourcePricing(thriftItem.getId());
9836 rajveer 950
				items.add(getItemFromThriftItem(thriftItem, vip, vim, sip, null, null, null, null, null, null));
11671 vikram.rag 951
			} catch (Exception e) {
952
				logger.error("Could not fetch item for : " + itemId, e);
953
				return "Could not push to production. No item got pushed.";
954
			}
955
		}
956
		for (Item it : items) {
957
			logger.info("Update item on production call, Item Id: " + it.getId());
3354 chandransh 958
 
11671 vikram.rag 959
			try{
960
				CatalogClient catalogServiceClient_Prod = new CatalogClient( 
961
						ConfigClientKeys.catalog_service_server_host_prod.toString(),
962
						ConfigClientKeys.catalog_service_server_port.toString());
3354 chandransh 963
 
11671 vikram.rag 964
				Client catalogClient_Prod = catalogServiceClient_Prod.getClient();
3354 chandransh 965
 
11671 vikram.rag 966
				in.shop2020.model.v1.catalog.Item tItem = catalogClient_Prod.getItem(it.getId());
3354 chandransh 967
 
11671 vikram.rag 968
				InventoryClient inventoryServiceClient = new InventoryClient();
969
				in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
3354 chandransh 970
 
11671 vikram.rag 971
				if(it.getMrp() != null) {
972
					tItem.setMrp(it.getMrp());
973
				}
3558 rajveer 974
 
11671 vikram.rag 975
				if(it.getSellingPrice() != null) {
976
					tItem.setSellingPrice(it.getSellingPrice());
977
				}
4423 phani.kuma 978
 
11671 vikram.rag 979
				tItem.setBestDealText(it.getBestDealsText());
980
 
981
				if (it.getItemStatusValue()  == ItemStatus.ACTIVE.getValue() || it.getItemStatusValue()  == ItemStatus.PAUSED.getValue()) {
982
					tItem.setItemStatus(status.findByValue(it.getItemStatusValue()));
983
					tItem.setStartDate(it.getStartDate());
984
				}
985
				long rItemId;
986
				if((rItemId = catalogClient_Prod.updateItem(tItem)) != it.getId()) {
987
					logger.error("Error updating item on production, returned Item Id: " + rItemId);
988
					return "Error updating item prices on production";
989
				}
990
				if(it.getFreebieItemId() !=null && it.getFreebieItemId()!=0) {
991
					in.shop2020.model.v1.catalog.FreebieItem freebieItem = new in.shop2020.model.v1.catalog.FreebieItem();
992
					freebieItem.setItemId(it.getId());
993
					freebieItem.setFreebieItemId(it.getFreebieItemId());
994
					catalogClient_Prod.addOrUpdateFreebieForItem(freebieItem);
995
				}
996
				logger.info("Successfully updated item: " + it.getId());
997
 
998
				StringBuilder sb = new StringBuilder();
999
 
1000
				Map<Long, VendorPricings> vendorPricings = it.getVendorPricesMap();
1001
				if(vendorPricings != null && !vendorPricings.isEmpty()) {
1002
					in.shop2020.model.v1.inventory.VendorItemPricing tVendorPricing;
1003
					for(VendorPricings v : vendorPricings.values()) {
1004
						tVendorPricing = new in.shop2020.model.v1.inventory.VendorItemPricing();
1005
						tVendorPricing.setVendorId(v.getVendorId());
1006
						tVendorPricing.setItemId(it.getId());
1007
						tVendorPricing.setMop(v.getMop());
1008
						tVendorPricing.setTransferPrice(v.getTransferPrice());
1009
						tVendorPricing.setNlc(v.getNlc());
1010
						tVendorPricing.setDealerPrice(v.getDealerPrice());
1011
						inventoryClient.addVendorItemPricing(tVendorPricing);
1012
						logger.info("VendorItemPricing updated. " + tVendorPricing.toString());
1013
						sb.append("[VId:" + v.getVendorId() + ",MOP=" + v.getMop() + ",TP=" + v.getTransferPrice() + ",NLC= " +v.getNlc() + ",DP=" + v.getDealerPrice() + "], ");
1014
					}
1015
				}
1016
 
1017
				Map<String, VendorItemMapping> vendorMappings = it.getVendorKeysMap();
1018
				if(vendorMappings != null && !vendorMappings.isEmpty()) {
1019
					in.shop2020.model.v1.inventory.VendorItemMapping tVendorMapping;
1020
					for(VendorItemMapping vendorItemMapping : vendorMappings.values()) {
1021
						tVendorMapping = new in.shop2020.model.v1.inventory.VendorItemMapping();
1022
						tVendorMapping.setVendorId(vendorItemMapping.getVendorId());
1023
						tVendorMapping.setItemId(it.getId());
1024
						tVendorMapping.setItemKey(vendorItemMapping.getItemKey());
1025
						inventoryClient.addVendorItemMapping(vendorItemMapping.getItemKey(), tVendorMapping);
1026
						logger.info("VendorItemMapping updated. " + tVendorMapping.toString());
1027
						sb.append("[VId:" + vendorItemMapping.getVendorId() + ",ItemKey=" + vendorItemMapping.getItemKey() + "], ");
1028
					}
1029
				}
1030
 
1031
				Map<Long, SourcePricings> sourcePricings = it.getSourcePricesMap();
1032
				if(sourcePricings != null && !sourcePricings.isEmpty()){
1033
					in.shop2020.model.v1.catalog.SourceItemPricing tSourcePricing;
1034
					for(SourcePricings s : sourcePricings.values()){
1035
						tSourcePricing = new in.shop2020.model.v1.catalog.SourceItemPricing();
1036
						tSourcePricing.setSourceId(s.getSourceId());
1037
						tSourcePricing.setItemId(it.getId());
1038
						tSourcePricing.setMrp(s.getMrp());
1039
						tSourcePricing.setSellingPrice(s.getSellingPrice());
1040
						catalogClient_Prod.addSourceItemPricing(tSourcePricing);
1041
						logger.info("SourceItemPricing updated. " + tSourcePricing.toString());
1042
						sb.append("[SId:" + s.getSourceId() + ",MRP=" + s.getMrp() + ",SP=" + s.getSellingPrice() + "], ");
1043
					}
1044
				}
1045
 
1046
				pushToProdLogger.info("Id=" + it.getId() + ",MRP=" + it.getMrp() + ",SP=" + " " + it.getSellingPrice() + sb.toString());
1047
			} catch (Exception e) {
1048
				logger.error("Error while updating prices on production", e);
1049
				return "Error while updating all prices on production. Some of the prices may not have been  updated";
1050
			}
1051
		}
1052
 
1053
		try {
1054
			ContentClient contentServiceClient = new ContentClient();
1055
			ContentService.Client contentClient = contentServiceClient.getClient();
1056
 
1057
			contentClient.pushContentToProduction(items.get(0).getCatalogItemId());
1058
		} catch (TTransportException e) {
1059
			logger.error("Error while establishing connection to the content server", e);
1060
			return "Error generating content. Prices updated successfully.";
1061
		} catch (TException e) {
1062
			logger.error("Error while pushing content to production", e);
1063
			return "Error generating content. Prices updated successfully.";
1064
		} catch (ContentServiceException e) {
1065
			logger.error("Error while pushing content to production", e);
1066
			return "Error generating content. Prices updated successfully.";
1067
		}
1068
 
1069
		return "Prices updated and content generated successfully";
1070
	}
1071
 
1072
	/**
1073
	 * Returns list of items with a particular status.
1074
	 * @param st
1075
	 * @return
1076
	 */
1077
	private List<Item> getItemsByStatus(status st, int start, int limit) {
1078
		List<Item> itemList = new ArrayList<Item>();
1079
		try {
1080
			CatalogClient catalogServiceClient = new CatalogClient();
1081
			Client catalogClient = catalogServiceClient.getClient();
1082
 
1083
			List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getAllItemsByStatusInRange(st, start, limit);
1084
 
1085
			for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
1086
				itemList.add(getItemFromThriftItem(thriftItem, null, null, null, null, null, null, null, null, null, null, null));
1087
			}
1088
		} catch (Exception e) {
1089
			logger.error("Error while getting items by status: " + st, e);
1090
		}
1091
		return itemList;
1092
	}
1093
 
1094
	/**
1095
	 * Creates a new Item object and populates its attributes from thrift item passed as parameter.
1096
	 * Also creates a Map each for VendorItemPricing, VendorItemMapping, SourceItemPricing and SimilarItems and adds these maps to the
1097
	 * new Item object.
1098
	 * @param thriftItem
1099
	 * @param tVendorPricings
1100
	 * @param tVendorMappings
1101
	 * @param tSourceMappings
1102
	 * @param tSimilarItems
1103
	 * @param tVoucherMappings
1104
	 * @param stockPurchaseParams 
1105
	 * @return item object with attributes copied from thrift item object.
1106
	 */
1107
	private Item getItemFromThriftItem(in.shop2020.model.v1.catalog.Item thriftItem, 
1108
			List<in.shop2020.model.v1.inventory.VendorItemPricing> tVendorPricings, 
1109
			List<in.shop2020.model.v1.inventory.VendorItemMapping> tVendorMappings,
1110
			List<in.shop2020.model.v1.catalog.SourceItemPricing> tSourceMappings,
1111
			List<in.shop2020.model.v1.catalog.Item> tSimilarItems, 
1112
			in.shop2020.model.v1.inventory.ItemInventory tItemInventory, 
1113
			List<in.shop2020.model.v1.catalog.VoucherItemMapping> tVoucherMappings, 
1114
			ItemStockPurchaseParams tStockPurchaseParams, Map<Long,String> saleHistory, Long freebieItemId){
1115
 
1116
		Map<String, VendorItemMapping> vItemMap = new HashMap<String, VendorItemMapping>();
1117
		VendorItemMapping vItemMapping;
1118
		if(tVendorMappings != null) {
1119
			for(in.shop2020.model.v1.inventory.VendorItemMapping vim : tVendorMappings) {
1120
				vItemMapping = new VendorItemMapping();
1121
				vItemMapping.setVendorId(vim.getVendorId());
1122
				vItemMapping.setItemKey(vim.getItemKey());
1123
				vItemMap.put(vItemMapping.getVendorId() + Item.KEY_SEPARATOR + vim.getItemKey(), vItemMapping);
1124
			}
1125
		}
1126
 
1127
		Map<Long, VendorPricings> vendorPricingMap = new HashMap<Long, VendorPricings>();
1128
		VendorPricings vPricings;
1129
		if(tVendorPricings != null) {
1130
			for(in.shop2020.model.v1.inventory.VendorItemPricing vip : tVendorPricings) {
1131
				vPricings = new VendorPricings();
1132
				vPricings.setVendorId(vip.getVendorId());
1133
				vPricings.setMop(vip.getMop());
1134
				vPricings.setDealerPrice(vip.getDealerPrice());
1135
				vPricings.setTransferPrice(vip.getTransferPrice());
1136
				vPricings.setNlc(vip.getNlc());
1137
				vendorPricingMap.put(vPricings.getVendorId(), vPricings);
1138
			}
1139
		}
1140
 
1141
		Map<Long, SourcePricings> sourcePricingMap = new HashMap<Long, SourcePricings>();
1142
		SourcePricings sPricings;
1143
		if(tSourceMappings != null) {
1144
			for(in.shop2020.model.v1.catalog.SourceItemPricing sip : tSourceMappings) {
1145
				sPricings = new SourcePricings();
1146
				sPricings.setSourceId(sip.getSourceId());
1147
				sPricings.setMrp(sip.getMrp());
1148
				sPricings.setSellingPrice(sip.getSellingPrice());
1149
				sourcePricingMap.put(sPricings.getSourceId(), sPricings);
1150
			}
1151
		}
1152
 
1153
		Map<Long, Item> SimilarItemslist = new HashMap<Long, Item>();
1154
		Item sItems;
1155
		if(tSimilarItems != null) {
1156
			for(in.shop2020.model.v1.catalog.Item sit : tSimilarItems) {
1157
				sItems = new Item();
1158
				sItems.setCatalogItemId(sit.getCatalogItemId());
1159
				sItems.setProductGroup(sit.getProductGroup());
1160
				sItems.setBrand(sit.getBrand());
1161
				sItems.setModelNumber(sit.getModelNumber());
1162
				sItems.setModelName(sit.getModelName());
1163
				sItems.setContentCategory(CategoryManager.getCategoryManager().getCategoryLabel(sit.getCategory()));
1164
				SimilarItemslist.put(sit.getCatalogItemId(), sItems);
1165
			}
1166
		}
1167
 
1168
		Map<Long, ItemInventory> itemInventoryMap = new HashMap<Long, ItemInventory>();
1169
		ItemInventory warehousedata;
1170
		if(tItemInventory != null) {
1171
			Map<Long, Long> availabilityMap = tItemInventory.getAvailability();
1172
			Map<Long, Long> reservedMap = tItemInventory.getReserved();
1173
			Map<Long, Long> heldMap = tItemInventory.getHeld();
1174
			for(Entry<Long, Long> availability : availabilityMap.entrySet()) {
1175
				Map<Integer, Long> heldInventoryMap = new HashMap<Integer, Long>();
1176
				warehousedata = new ItemInventory();
1177
				warehousedata.setWarehouseId(availability.getKey());
1178
				warehousedata.setAvailability(availability.getValue());
1179
				warehousedata.setReserved(reservedMap.get(availability.getKey()));
1180
				warehousedata.setHeld(heldMap.get(availability.getKey()));
1181
				try {
1182
					if(warehousedata.getHeld()>0) {
1183
						InventoryService.Client inventoryClient = new InventoryClient().getClient();
1184
						heldInventoryMap = inventoryClient.getHeldInventoryMapForItem(thriftItem.getId(), availability.getKey());
1185
					}
1186
					if(heldInventoryMap.size()>0) {
1187
						for(Integer source : heldInventoryMap.keySet()) {
1188
							switch(source) {
1189
							case EBAYSOURCE: warehousedata.setEbayHeld(heldInventoryMap.get(source));
1190
							break;
1191
							case SNAPDEALSOURCE: warehousedata.setSnapdealHeld(heldInventoryMap.get(source));
1192
							break;
1193
							case FLIPKARTSOURCE: warehousedata.setFlipkartHeld(heldInventoryMap.get(source));
1194
							}
1195
						}
1196
					}
1197
				} catch (Exception e) {
1198
					logger.error("Error in getting data from holdInventoryDetail for itemId " + thriftItem.getId() + 
1199
							" and warehouse " +availability.getKey());
1200
				}
1201
				itemInventoryMap.put(warehousedata.getWarehouseId(), warehousedata);
1202
			}
1203
		}
1204
		else {
1205
			itemInventoryMap = null;
1206
		}
1207
 
1208
		Map<String, VoucherItemMapping> voucherMap = new HashMap<String, VoucherItemMapping>();
1209
		VoucherItemMapping voucher;
1210
		if(tVoucherMappings != null) {
1211
			for(in.shop2020.model.v1.catalog.VoucherItemMapping tvoucher : tVoucherMappings) {
1212
				voucher = new VoucherItemMapping(tvoucher.getAmount(), VoucherType.findByValue((int) tvoucher.getVoucherType()).name());
1213
				voucherMap.put(VoucherType.findByValue((int) tvoucher.getVoucherType()).name(), voucher);
1214
			}
1215
		}
1216
 
1217
		in.shop2020.catalog.dashboard.shared.ItemStockPurchaseParams stockPurchaseParams = 
1218
			new in.shop2020.catalog.dashboard.shared.ItemStockPurchaseParams();
1219
		if(tStockPurchaseParams != null) {
1220
			stockPurchaseParams.setItem_id(tStockPurchaseParams.getItem_id());
1221
			stockPurchaseParams.setMinStockLevel(tStockPurchaseParams.getMinStockLevel());
1222
			stockPurchaseParams.setNumOfDaysStock(tStockPurchaseParams.getNumOfDaysStock());
1223
		}
1224
 
1225
		Item item = new Item(thriftItem.getId(),
1226
				thriftItem.getProductGroup(),
1227
				thriftItem.getBrand(),
1228
				thriftItem.getModelNumber(),
1229
				thriftItem.getModelName(),
1230
				thriftItem.getColor(),
1231
				CategoryManager.getCategoryManager().getCategoryLabel(thriftItem.getCategory()),
1232
				thriftItem.getCategory(),
1233
				thriftItem.getComments(),
1234
				thriftItem.getCatalogItemId(),
1235
				thriftItem.getFeatureId(),
1236
				thriftItem.getFeatureDescription(),
1237
				thriftItem.isSetMrp() ? thriftItem.getMrp() : null,
1238
						thriftItem.isSetSellingPrice() ? thriftItem.getSellingPrice() : null,
1239
								thriftItem.isSetWeight() ? thriftItem.getWeight() : null,
1240
										thriftItem.getAddedOn(),
1241
										thriftItem.getStartDate(),
1242
										thriftItem.isSetComingSoonStartDate() ? thriftItem.getComingSoonStartDate() : null ,
1243
												thriftItem.isSetExpectedArrivalDate() ? thriftItem.getExpectedArrivalDate() : null ,
1244
														thriftItem.getRetireDate(),
1245
														thriftItem.getUpdatedOn(),
1246
														thriftItem.getItemStatus().name(),
1247
														thriftItem.getItemStatus().getValue(),
1248
														thriftItem.getStatus_description(),
1249
														thriftItem.getBestDealText(),
1250
														thriftItem.getBestDealsDetailsText(),
1251
														thriftItem.getBestDealsDetailsLink(),
1252
														thriftItem.isSetBestDealValue() ? thriftItem.getBestDealValue() : null,
1253
																thriftItem.isSetBestSellingRank() ? thriftItem.getBestSellingRank() : null,
1254
																		thriftItem.isDefaultForEntity(),
1255
																		thriftItem.isRisky(),
1256
																		thriftItem.isSetExpectedDelay() ? thriftItem.getExpectedDelay() : null,
1257
																				thriftItem.isIsWarehousePreferenceSticky(),
1258
																				thriftItem.isHasItemNo(),
1259
																				ItemType.SERIALIZED.equals(thriftItem.getType()),
1260
																				thriftItem.isSetShowSellingPrice() ? thriftItem.isShowSellingPrice() : false,
1261
																						thriftItem.isHoldOverride(),
1262
																						thriftItem.isSetPreferredVendor() ? thriftItem.getPreferredVendor() : null,
1263
																								thriftItem.isSetPreferredInsurer() ? thriftItem.getPreferredInsurer() : null,		
1264
																										itemInventoryMap,
1265
																										vendorPricingMap,
1266
																										vItemMap,
1267
																										sourcePricingMap,
1268
																										SimilarItemslist,
1269
																										voucherMap, 
1270
																										stockPurchaseParams.getNumOfDaysStock(), 
1271
																										stockPurchaseParams.getMinStockLevel(), 
1272
																										saleHistory, 
1273
																										freebieItemId,
1274
																										thriftItem.getAsin(),
1275
																										thriftItem.getHoldInventory(),
1276
																										thriftItem.getDefaultInventory());
1277
		return item;
1278
	}
1279
 
1280
	/**
1281
	 * 
1282
	 * @return True if push to production count is less than maximum allowed.
1283
	 */
1284
	private boolean canPushToProduction() {
1285
		int count = getPushToProdCount(logFile);
1286
		return count < maxCount;
1287
	}
1288
 
1289
	/**
1290
	 * If this is the first attempt to push to production for current date, returns 0
1291
	 * else reads number of lines from daily rolling log file to get the count.
1292
	 * @return push to production count for current date
1293
	 */
1294
	private int getPushToProdCount(String logfile) {
1295
		// logfile is "/var/log/services/pushToProductionCount/pushToProd.log"
1296
		// this should also be set in log4j.properties
1297
		int lineCount = 0;
1298
		DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
1299
		Date currentDate = Calendar.getInstance().getTime();
1300
		if(pushToProdDate == null ||  !dateFormat.format(pushToProdDate).equals(dateFormat.format(currentDate))) {
1301
			pushToProdDate = currentDate;
1302
			return lineCount;
1303
		}
1304
		try {
1305
			BufferedReader br = new BufferedReader(new FileReader(logfile));
1306
			while (br.readLine() != null) {
1307
				lineCount++;
1308
			}
1309
		} catch (IOException e) {
1310
			logger.error("Error while reading the log file", e);
1311
		}
1312
		return lineCount;
1313
	}
1314
 
4423 phani.kuma 1315
	@Override
1316
	public boolean deleteSimilarItem(long itemId, long catalogItemId) {
1317
		try{
11671 vikram.rag 1318
			CatalogClient catalogServiceClient = new CatalogClient();
1319
			Client catalogClient = catalogServiceClient.getClient();
4423 phani.kuma 1320
 
11671 vikram.rag 1321
			return catalogClient.deleteSimilarItem(itemId, catalogItemId);
4423 phani.kuma 1322
 
11671 vikram.rag 1323
		}catch(Exception e){
1324
			logger.error("Error while deleting the SimilarItems for: " + itemId, e);
1325
		}
1326
		return false;
4423 phani.kuma 1327
	}
1328
 
1329
	@Override
1330
	public Item addSimilarItem(long itemId, long catalogItemId) {
1331
		try{
11671 vikram.rag 1332
			CatalogClient catalogServiceClient = new CatalogClient();
1333
			Client catalogClient = catalogServiceClient.getClient();
1334
			in.shop2020.model.v1.catalog.Item thriftItem = catalogClient.addSimilarItem(itemId, catalogItemId);;
4423 phani.kuma 1335
 
11671 vikram.rag 1336
			return getItemFromThriftItem(thriftItem, null, null, null, null, null, null, null, null, null,null,null);
1337
		}catch(Exception e){
1338
			logger.error("Error while adding the SimilarItems for: " + itemId, e);
1339
		}
1340
		return null;
4423 phani.kuma 1341
	}
4431 phani.kuma 1342
 
1343
	@Override
1344
	public Map<Long, ItemInventory> getProdItemInventory(long itemId) {
1345
		try {
11671 vikram.rag 1346
			// Initialize client for production server
1347
			CatalogClient catalogServiceClient_Prod = new CatalogClient(ConfigClientKeys.catalog_service_server_host_prod.toString(),
1348
					ConfigClientKeys.catalog_service_server_port.toString());
1349
			Client catalogClient_Prod = catalogServiceClient_Prod.getClient();
1350
			InventoryClient inventoryServiceClient = new InventoryClient();
1351
			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
1352
			in.shop2020.model.v1.inventory.ItemInventory thriftItemInventory = inventoryClient.getItemInventoryByItemId(itemId);
1353
 
1354
			Map<Long, ItemInventory> itemInventoryMap = new HashMap<Long, ItemInventory>();
1355
			ItemInventory warehousedata;
1356
			if(thriftItemInventory != null) {
1357
				Map<Long, Long> availabilityMap = thriftItemInventory.getAvailability();
1358
				Map<Long, Long> reservedMap = thriftItemInventory.getReserved();
1359
				Map<Long, Long> heldMap = thriftItemInventory.getHeld();
1360
				for(Entry<Long, Long> availability : availabilityMap.entrySet()) {
1361
					Map<Integer, Long> heldInventoryMap = new HashMap<Integer, Long>();
1362
					warehousedata = new ItemInventory();
1363
					warehousedata.setWarehouseId(availability.getKey());
1364
					warehousedata.setAvailability(availability.getValue());
1365
					warehousedata.setReserved(reservedMap.get(availability.getKey()));
1366
					warehousedata.setHeld(heldMap.get(availability.getKey()));
1367
					try {
1368
						if(warehousedata.getHeld()>0) {
1369
							heldInventoryMap = inventoryClient.getHeldInventoryMapForItem(itemId, availability.getKey());
1370
						}
1371
						if(heldInventoryMap.size()>0) {
1372
							for(Integer source : heldInventoryMap.keySet()) {
1373
								switch(source) {
1374
								case EBAYSOURCE: warehousedata.setEbayHeld(heldInventoryMap.get(source));
1375
								break;
1376
								case SNAPDEALSOURCE: warehousedata.setSnapdealHeld(heldInventoryMap.get(source));
1377
								break;
1378
								case FLIPKARTSOURCE: warehousedata.setFlipkartHeld(heldInventoryMap.get(source));
1379
								}
1380
							}
1381
						} 
1382
					}catch (Exception e) {
1383
						logger.error("Error in getting data from holdInventoryDetail for itemId " + itemId + 
1384
								" and warehouse " +availability.getKey());
1385
					}
1386
					itemInventoryMap.put(warehousedata.getWarehouseId(), warehousedata);
1387
				}
1388
			}
1389
			else {
1390
				itemInventoryMap = null;
1391
			}
1392
			return itemInventoryMap;
1393
		} catch (Exception e) {
1394
			logger.error("Error while updating item's risky flag on staging", e);
1395
		}
4431 phani.kuma 1396
		return null;
1397
	}
4649 phani.kuma 1398
 
1399
	@Override
1400
	public boolean addAuthorizationLog(long itemId, String username, String message) {
1401
		try{
11671 vikram.rag 1402
			CatalogClient catalogServiceClient = new CatalogClient();
1403
			Client catalogClient = catalogServiceClient.getClient();
4649 phani.kuma 1404
 
11671 vikram.rag 1405
			return catalogClient.addAuthorizationLog(itemId, username, message);
4649 phani.kuma 1406
 
11671 vikram.rag 1407
		}catch(Exception e){
1408
			logger.error("Error while adding the event for: " + itemId, e);
1409
		}
4649 phani.kuma 1410
		return false;
1411
	}
1412
 
1413
	@Override
1414
	public Map<String, String> getConfigdataforPriceCompare() {
1415
		Map<String, String> ConfigMap = new HashMap<String, String>();
1416
		try {
1417
			ConfigMap.put("courier_cost_factor", ConfigClient.getClient().get(ConfigClientKeys.courier_cost_factor.toString()));
11671 vikram.rag 1418
			ConfigMap.put("courier_weight_factor", ConfigClient.getClient().get(ConfigClientKeys.courier_weight_factor.toString()));
1419
			ConfigMap.put("breakeven_divisor", ConfigClient.getClient().get(ConfigClientKeys.breakeven_divisor.toString()));
1420
			ConfigMap.put("breakeven_additon_factor", ConfigClient.getClient().get(ConfigClientKeys.breakeven_additon_factor.toString()));
1421
			ConfigMap.put("transfer_price_percentage", ConfigClient.getClient().get(ConfigClientKeys.transfer_price_percentage.toString()));
1422
			ConfigMap.put("transfer_price_factor", ConfigClient.getClient().get(ConfigClientKeys.transfer_price_factor.toString()));
1423
		} catch(ConfigException ce) {
1424
			logger.error("Unable to connect to the config server. Setting sensible defaults.", ce);
1425
			ConfigMap.put("courier_cost_factor", "60");
1426
			ConfigMap.put("courier_weight_factor", "500");
1427
			ConfigMap.put("breakeven_divisor", "0.98");
1428
			ConfigMap.put("breakeven_additon_factor", "50");
1429
			ConfigMap.put("transfer_price_percentage", "2");
1430
			ConfigMap.put("transfer_price_factor", "50");
1431
		}
4649 phani.kuma 1432
		return ConfigMap;
1433
	}
4957 phani.kuma 1434
 
1435
	@Override
1436
	public List<String> getAllCategories() {
1437
		List<String> categoryList = new ArrayList<String>();
1438
		List<Long> parentCategoryIDs = Arrays.asList(new Long[] {(long) 0,(long) 10001,(long) 10009,(long) 10049});
11671 vikram.rag 1439
		try {
1440
			CatalogClient catalogServiceClient = new CatalogClient();
1441
			Client catalogClient = catalogServiceClient.getClient();
4957 phani.kuma 1442
 
11671 vikram.rag 1443
			List<in.shop2020.model.v1.catalog.Category> categories = catalogClient.getAllCategories();
4957 phani.kuma 1444
 
11671 vikram.rag 1445
			for(in.shop2020.model.v1.catalog.Category category : categories) {
1446
				if(!parentCategoryIDs.contains(category.getParent_category_id())){
1447
					categoryList.add(category.getDisplay_name());
1448
				}
1449
				else{
1450
					continue;
1451
				}
1452
			}
1453
		} catch (Exception e) {
1454
			logger.error("Error while getting all the categories: ", e);
1455
		}
1456
		return categoryList;
4957 phani.kuma 1457
	}
1458
 
1459
	@Override
1460
	public List<String> getAllBrands() {
1461
		List<String> brandsList = new ArrayList<String>();
11671 vikram.rag 1462
		try {
1463
			CatalogClient catalogServiceClient = new CatalogClient();
1464
			Client catalogClient = catalogServiceClient.getClient();
4957 phani.kuma 1465
 
11671 vikram.rag 1466
			brandsList = catalogClient.getAllBrands();
1467
		} catch (Exception e) {
1468
			logger.error("Error while getting all the categories: ", e);
1469
		}
1470
		return brandsList;
4957 phani.kuma 1471
	}
5427 amit.gupta 1472
 
5504 phani.kuma 1473
	@Override
5516 phani.kuma 1474
	public boolean deleteVoucher(Long catalogItemId, Long voucherType) {
5504 phani.kuma 1475
		try{
11671 vikram.rag 1476
			CatalogClient catalogServiceClient = new CatalogClient();
1477
			Client catalogClient = catalogServiceClient.getClient();
5504 phani.kuma 1478
 
11671 vikram.rag 1479
			return catalogClient.deleteVoucherForItem(catalogItemId, voucherType);
5504 phani.kuma 1480
 
11671 vikram.rag 1481
		}catch(Exception e){
1482
			logger.error("Error while deleting the Voucher for: " + catalogItemId, e);
1483
		}
1484
		return false;
5504 phani.kuma 1485
	}
1486
 
1487
	@Override
5516 phani.kuma 1488
	public boolean addVoucher(Long catalogItemId, Long voucherType, long voucherAmount) {
5504 phani.kuma 1489
		try{
11671 vikram.rag 1490
			CatalogClient catalogServiceClient = new CatalogClient();
1491
			Client catalogClient = catalogServiceClient.getClient();
5504 phani.kuma 1492
 
11671 vikram.rag 1493
			return catalogClient.addupdateVoucherForItem(catalogItemId, voucherType, voucherAmount);
5504 phani.kuma 1494
 
11671 vikram.rag 1495
		}catch(Exception e){
1496
			logger.error("Error while adding the Voucher for: " + catalogItemId, e);
1497
		}
5504 phani.kuma 1498
		return false;
1499
	}
1500
	@Override
5516 phani.kuma 1501
	public Map<Long, String> getvoucherTypes() {
1502
		Map<Long, String> voucherType = new HashMap<Long, String>();
5504 phani.kuma 1503
		for(VoucherType voucher : VoucherType.values())
1504
		{
5516 phani.kuma 1505
			voucherType.put((long) voucher.getValue(), voucher.name());
5504 phani.kuma 1506
		}
1507
		return voucherType;
1508
	}
1509
 
5586 phani.kuma 1510
	@Override
1511
	public boolean getConfigforentityIdMandatory() {
1512
		try {
1513
			String entityId_mandatory = ConfigClient.getClient().get(ConfigClientKeys.entityId_mandatory.toString());
1514
			if (entityId_mandatory.equals("TRUE")) {
1515
				return true;
1516
			}
11671 vikram.rag 1517
		} catch(ConfigException ce) {
1518
			logger.error("Unable to connect to the config server. Setting sensible defaults.", ce);
1519
		}
5586 phani.kuma 1520
		return false;
1521
	}
1522
 
1523
	@Override
1524
	public boolean checkEntityId(long entityId) {
1525
		try {
11671 vikram.rag 1526
			CatalogClient catalogServiceClient = new CatalogClient(ConfigClientKeys.catalog_service_server_host_master.toString(), ConfigClientKeys.catalog_service_server_port.toString());
1527
			Client catalogClient = catalogServiceClient.getClient();
1528
			return catalogClient.isValidCatalogItemId(entityId);
1529
		} catch (Exception e) {
1530
			logger.error("Error while checking for a Catalog Item Id: ", e);
1531
		}
5586 phani.kuma 1532
		return false;
1533
	}
1534
 
6096 amit.gupta 1535
	@Override
1536
	public String updateExpectedDelayOnProd(Item item) {
1537
		try{
11671 vikram.rag 1538
			CatalogClient catalogServiceClient_Prod = new CatalogClient( 
1539
					ConfigClientKeys.catalog_service_server_host_prod.toString(),
1540
					ConfigClientKeys.catalog_service_server_port.toString());
6096 amit.gupta 1541
 
11671 vikram.rag 1542
			Client catalogClient_Prod = catalogServiceClient_Prod.getClient();
6096 amit.gupta 1543
 
11671 vikram.rag 1544
 
1545
			in.shop2020.model.v1.catalog.Item tItem = catalogClient_Prod.getItem(item.getId());
1546
			if(item.getExpectedDelay() != null) {
1547
				tItem.setExpectedDelay(item.getExpectedDelay());
1548
				if(item.isItemType()) {
1549
					tItem.setType(ItemType.SERIALIZED);
1550
				}
1551
				else {
1552
					tItem.setType(ItemType.NON_SERIALIZED);
1553
				}
1554
				long rItemId;
1555
				if((rItemId = catalogClient_Prod.updateItem(tItem)) != item.getId()) {
1556
					logger.error("Error updating item on production, returned Item Id: " + rItemId);
1557
					return "Error updating expected delay on production";
1558
				}
1559
				InventoryClient inventoryServiceClient= new InventoryClient();
1560
				InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
1561
				inventoryClient.clearItemAvailabilityCacheForItem(rItemId);
1562
				logger.info("Successfully updated item: " + item.getId());
1563
				return "Expected delay successfully updated on prod"; 
1564
			} else {
1565
				return "Error:expected delay should not be null";
1566
			}
1567
		} catch (Exception e) {
1568
			logger.error("Error while updating expected delay on production", e);
1569
			return "Error while updating expected delay on production";
1570
		}
6096 amit.gupta 1571
	}
1572
 
6838 vikram.rag 1573
	@Override
1574
	public Map<Long, String> getAllInsurers() {
11671 vikram.rag 1575
		Map<Long, String> insurersMap = new HashMap<Long, String>();
1576
		try {
1577
			CatalogClient catalogServiceClient = new CatalogClient();
1578
			in.shop2020.model.v1.catalog.CatalogService.Client catalogClient = catalogServiceClient.getClient();
6096 amit.gupta 1579
 
11671 vikram.rag 1580
			List<Insurer> insurers = catalogClient.getAllInsurers();
1581
 
1582
			for(in.shop2020.model.v1.catalog.Insurer i : insurers) {
1583
				insurersMap.put(i.getId(), i.getName());
1584
			}
1585
		} catch (Exception e) {
1586
			logger.error("Error while getting all the vendors: ", e);
1587
		}
1588
		return insurersMap;
6838 vikram.rag 1589
	}
11671 vikram.rag 1590
 
10484 vikram.rag 1591
	private Item getItemFromThriftItem(in.shop2020.model.v1.catalog.Item thriftItem, 
11671 vikram.rag 1592
			List<in.shop2020.model.v1.inventory.VendorItemPricing> tVendorPricings, 
1593
			List<in.shop2020.model.v1.inventory.VendorItemMapping> tVendorMappings,
1594
			List<in.shop2020.model.v1.catalog.SourceItemPricing> tSourceMappings,
1595
			List<in.shop2020.model.v1.catalog.Item> tSimilarItems, 
1596
			in.shop2020.model.v1.inventory.ItemInventory tItemInventory, 
1597
			List<in.shop2020.model.v1.catalog.VoucherItemMapping> tVoucherMappings, 
1598
			ItemStockPurchaseParams tStockPurchaseParams, Map<Long,String> saleHistory, Long freebieItemId,Map<String,String> stateNameVatPercentageMap,in.shop2020.model.v1.catalog.PrivateDeal tPrivateDeal){
6838 vikram.rag 1599
 
11671 vikram.rag 1600
		Map<String, VendorItemMapping> vItemMap = new HashMap<String, VendorItemMapping>();
1601
		VendorItemMapping vItemMapping;
1602
		if(tVendorMappings != null) {
1603
			for(in.shop2020.model.v1.inventory.VendorItemMapping vim : tVendorMappings) {
1604
				vItemMapping = new VendorItemMapping();
1605
				vItemMapping.setVendorId(vim.getVendorId());
1606
				vItemMapping.setItemKey(vim.getItemKey());
1607
				vItemMap.put(vItemMapping.getVendorId() + Item.KEY_SEPARATOR + vim.getItemKey(), vItemMapping);
1608
			}
1609
		}
6838 vikram.rag 1610
 
11671 vikram.rag 1611
		Map<Long, VendorPricings> vendorPricingMap = new HashMap<Long, VendorPricings>();
1612
		VendorPricings vPricings;
1613
		if(tVendorPricings != null) {
1614
			for(in.shop2020.model.v1.inventory.VendorItemPricing vip : tVendorPricings) {
1615
				vPricings = new VendorPricings();
1616
				vPricings.setVendorId(vip.getVendorId());
1617
				vPricings.setMop(vip.getMop());
1618
				vPricings.setDealerPrice(vip.getDealerPrice());
1619
				vPricings.setTransferPrice(vip.getTransferPrice());
1620
				vPricings.setNlc(vip.getNlc());
1621
				vendorPricingMap.put(vPricings.getVendorId(), vPricings);
1622
			}
1623
		}
6096 amit.gupta 1624
 
11671 vikram.rag 1625
		Map<Long, SourcePricings> sourcePricingMap = new HashMap<Long, SourcePricings>();
1626
		SourcePricings sPricings;
1627
		if(tSourceMappings != null) {
1628
			for(in.shop2020.model.v1.catalog.SourceItemPricing sip : tSourceMappings) {
1629
				sPricings = new SourcePricings();
1630
				sPricings.setSourceId(sip.getSourceId());
1631
				sPricings.setMrp(sip.getMrp());
1632
				sPricings.setSellingPrice(sip.getSellingPrice());
1633
				sourcePricingMap.put(sPricings.getSourceId(), sPricings);
1634
			}
1635
		}
10484 vikram.rag 1636
 
11671 vikram.rag 1637
		Map<Long, Item> SimilarItemslist = new HashMap<Long, Item>();
1638
		Item sItems;
1639
		if(tSimilarItems != null) {
1640
			for(in.shop2020.model.v1.catalog.Item sit : tSimilarItems) {
1641
				sItems = new Item();
1642
				sItems.setCatalogItemId(sit.getCatalogItemId());
1643
				sItems.setProductGroup(sit.getProductGroup());
1644
				sItems.setBrand(sit.getBrand());
1645
				sItems.setModelNumber(sit.getModelNumber());
1646
				sItems.setModelName(sit.getModelName());
1647
				sItems.setContentCategory(CategoryManager.getCategoryManager().getCategoryLabel(sit.getCategory()));
1648
				SimilarItemslist.put(sit.getCatalogItemId(), sItems);
1649
			}
1650
		}
1651
 
1652
		Map<Long, ItemInventory> itemInventoryMap = new HashMap<Long, ItemInventory>();
1653
		ItemInventory warehousedata;
1654
		if(tItemInventory != null) {
1655
			Map<Long, Long> availabilityMap = tItemInventory.getAvailability();
1656
			Map<Long, Long> reservedMap = tItemInventory.getReserved();
1657
			Map<Long, Long> heldMap = tItemInventory.getHeld();
1658
			for(Entry<Long, Long> availability : availabilityMap.entrySet()) {
1659
				Map<Integer, Long> heldInventoryMap = new HashMap<Integer, Long>();
1660
				warehousedata = new ItemInventory();
1661
				warehousedata.setWarehouseId(availability.getKey());
1662
				warehousedata.setAvailability(availability.getValue());
1663
				warehousedata.setReserved(reservedMap.get(availability.getKey()));
1664
				warehousedata.setHeld(heldMap.get(availability.getKey()));
1665
				try {
1666
					if(warehousedata.getHeld()>0) {
1667
						InventoryService.Client inventoryClient = new InventoryClient().getClient();
1668
						heldInventoryMap = inventoryClient.getHeldInventoryMapForItem(thriftItem.getId(), availability.getKey());
1669
					}
1670
					if(heldInventoryMap.size()>0) {
1671
						for(Integer source : heldInventoryMap.keySet()) {
1672
							switch(source) {
1673
							case EBAYSOURCE: warehousedata.setEbayHeld(heldInventoryMap.get(source));
1674
							break;
1675
							case SNAPDEALSOURCE: warehousedata.setSnapdealHeld(heldInventoryMap.get(source));
1676
							break;
1677
							case FLIPKARTSOURCE: warehousedata.setFlipkartHeld(heldInventoryMap.get(source));
1678
							}
1679
						}
1680
					}
1681
				} catch (Exception e) {
1682
					logger.error("Error in getting data from holdInventoryDetail for itemId " + thriftItem.getId() + 
1683
							" and warehouse " +availability.getKey());
1684
				}
1685
				itemInventoryMap.put(warehousedata.getWarehouseId(), warehousedata);
1686
			}
1687
		}
1688
		else {
1689
			itemInventoryMap = null;
1690
		}
1691
 
1692
		Map<String, VoucherItemMapping> voucherMap = new HashMap<String, VoucherItemMapping>();
1693
		VoucherItemMapping voucher;
1694
		if(tVoucherMappings != null) {
1695
			for(in.shop2020.model.v1.catalog.VoucherItemMapping tvoucher : tVoucherMappings) {
1696
				voucher = new VoucherItemMapping(tvoucher.getAmount(), VoucherType.findByValue((int) tvoucher.getVoucherType()).name());
1697
				voucherMap.put(VoucherType.findByValue((int) tvoucher.getVoucherType()).name(), voucher);
1698
			}
1699
		}
1700
 
1701
		in.shop2020.catalog.dashboard.shared.ItemStockPurchaseParams stockPurchaseParams = 
1702
			new in.shop2020.catalog.dashboard.shared.ItemStockPurchaseParams();
1703
		if(tStockPurchaseParams != null) {
1704
			stockPurchaseParams.setItem_id(tStockPurchaseParams.getItem_id());
1705
			stockPurchaseParams.setMinStockLevel(tStockPurchaseParams.getMinStockLevel());
1706
			stockPurchaseParams.setNumOfDaysStock(tStockPurchaseParams.getNumOfDaysStock());
1707
		}
1708
		in.shop2020.catalog.dashboard.shared.PrivateDeal privateDeal=null;
1709
		if(tPrivateDeal!=null){
1710
			privateDeal= new in.shop2020.catalog.dashboard.shared.PrivateDeal();
1711
			privateDeal.setDealFreebieItemId(tPrivateDeal.getDealFreebieItemId());
1712
			privateDeal.setItem_id(tPrivateDeal.getItem_id());
1713
			privateDeal.setDealPrice(tPrivateDeal.getDealPrice());
1714
			privateDeal.setDealFreebieItemId(tPrivateDeal.getDealFreebieItemId());
1715
			if(tPrivateDeal.isSetStartDate()){
1716
				privateDeal.setStartDate(tPrivateDeal.getStartDate());
1717
			}
1718
			else{
1719
				privateDeal.setStartDate(null);
1720
			}
1721
			if(tPrivateDeal.isSetEndDate()){
1722
				privateDeal.setEndDate(tPrivateDeal.getEndDate());
1723
			}
1724
			else{
1725
				privateDeal.setEndDate(null);
1726
			}
1727
			privateDeal.setDealTextOption(tPrivateDeal.getDealTextOption());
1728
			privateDeal.setRank(tPrivateDeal.getRank());
1729
			privateDeal.setCod(tPrivateDeal.isIsCod());
1730
			privateDeal.setDealFreebieOption(tPrivateDeal.getDealFreebieOption());
1731
			if(tPrivateDeal.getDealText()!=null){
1732
				privateDeal.setDealText(tPrivateDeal.getDealText());
1733
			}
1734
			else{
1735
				privateDeal.setDealText("");
1736
			}
1737
 
1738
			privateDeal.setActive(tPrivateDeal.isIsActive());
1739
		}
1740
		Item item = new Item(thriftItem.getId(),
1741
				thriftItem.getProductGroup(),
1742
				thriftItem.getBrand(),
1743
				thriftItem.getModelNumber(),
1744
				thriftItem.getModelName(),
1745
				thriftItem.getColor(),
1746
				CategoryManager.getCategoryManager().getCategoryLabel(thriftItem.getCategory()),
1747
				thriftItem.getCategory(),
1748
				thriftItem.getComments(),
1749
				thriftItem.getCatalogItemId(),
1750
				thriftItem.getFeatureId(),
1751
				thriftItem.getFeatureDescription(),
1752
				thriftItem.isSetMrp() ? thriftItem.getMrp() : null,
1753
						thriftItem.isSetSellingPrice() ? thriftItem.getSellingPrice() : null,
1754
								thriftItem.isSetWeight() ? thriftItem.getWeight() : null,
1755
										thriftItem.getAddedOn(),
1756
										thriftItem.getStartDate(),
1757
										thriftItem.isSetComingSoonStartDate() ? thriftItem.getComingSoonStartDate() : null ,
1758
												thriftItem.isSetExpectedArrivalDate() ? thriftItem.getExpectedArrivalDate() : null ,
1759
														thriftItem.getRetireDate(),
1760
														thriftItem.getUpdatedOn(),
1761
														thriftItem.getItemStatus().name(),
1762
														thriftItem.getItemStatus().getValue(),
1763
														thriftItem.getStatus_description(),
1764
														thriftItem.getBestDealText(),
1765
														thriftItem.getBestDealsDetailsText(),
1766
														thriftItem.getBestDealsDetailsLink(),
1767
														thriftItem.isSetBestDealValue() ? thriftItem.getBestDealValue() : null,
1768
																thriftItem.isSetBestSellingRank() ? thriftItem.getBestSellingRank() : null,
1769
																		thriftItem.isDefaultForEntity(),
1770
																		thriftItem.isRisky(),
1771
																		thriftItem.isSetExpectedDelay() ? thriftItem.getExpectedDelay() : null,
1772
																				thriftItem.isIsWarehousePreferenceSticky(),
1773
																				thriftItem.isHasItemNo(),
1774
																				ItemType.SERIALIZED.equals(thriftItem.getType()),
1775
																				thriftItem.isSetShowSellingPrice() ? thriftItem.isShowSellingPrice() : false,
1776
																						thriftItem.isHoldOverride(),
1777
																						thriftItem.isSetPreferredVendor() ? thriftItem.getPreferredVendor() : null,
1778
																								thriftItem.isSetPreferredInsurer() ? thriftItem.getPreferredInsurer() : null,		
1779
																										itemInventoryMap,
1780
																										vendorPricingMap,
1781
																										vItemMap,
1782
																										sourcePricingMap,
1783
																										SimilarItemslist,
1784
																										voucherMap, 
1785
																										stockPurchaseParams.getNumOfDaysStock(), 
1786
																										stockPurchaseParams.getMinStockLevel(), 
1787
																										saleHistory, 
1788
																										freebieItemId,
1789
																										thriftItem.getAsin(),
1790
																										thriftItem.getHoldInventory(),
1791
																										thriftItem.getDefaultInventory(),stateNameVatPercentageMap,privateDeal);
1792
		return item;
1793
	}
6530 vikram.rag 1794
}