Subversion Repositories SmartDukaan

Rev

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