Subversion Repositories SmartDukaan

Rev

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