Subversion Repositories SmartDukaan

Rev

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