Subversion Repositories SmartDukaan

Rev

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