Subversion Repositories SmartDukaan

Rev

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

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