Subversion Repositories SmartDukaan

Rev

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

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