Subversion Repositories SmartDukaan

Rev

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