Subversion Repositories SmartDukaan

Rev

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