Subversion Repositories SmartDukaan

Rev

Rev 18150 | Rev 18415 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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