Subversion Repositories SmartDukaan

Rev

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