Subversion Repositories SmartDukaan

Rev

Rev 9841 | Rev 9845 | 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;
6530 vikram.rag 4
 
7190 amar.kumar 5
import in.shop2020.catalog.dashboard.shared.FreebieItem;
1961 ankur.sing 6
import in.shop2020.catalog.dashboard.shared.Item;
4431 phani.kuma 7
import in.shop2020.catalog.dashboard.shared.ItemInventory;
3850 chandransh 8
import in.shop2020.catalog.dashboard.shared.ItemStatus;
2068 ankur.sing 9
import in.shop2020.catalog.dashboard.shared.ItemsComparator;
3558 rajveer 10
import in.shop2020.catalog.dashboard.shared.SourcePricings;
2119 ankur.sing 11
import in.shop2020.catalog.dashboard.shared.VendorItemMapping;
12
import in.shop2020.catalog.dashboard.shared.VendorPricings;
5504 phani.kuma 13
import in.shop2020.catalog.dashboard.shared.VoucherItemMapping;
2378 ankur.sing 14
import in.shop2020.config.ConfigException;
3907 chandransh 15
import in.shop2020.content.ContentService;
16
import in.shop2020.content.ContentServiceException;
5946 rajveer 17
import in.shop2020.model.v1.catalog.CatalogService.Client;
6838 vikram.rag 18
import in.shop2020.model.v1.catalog.Insurer;
5706 amit.gupta 19
import in.shop2020.model.v1.catalog.ItemType;
2105 ankur.sing 20
import in.shop2020.model.v1.catalog.status;
6096 amit.gupta 21
import in.shop2020.model.v1.inventory.InventoryService;
6813 amar.kumar 22
import in.shop2020.model.v1.inventory.ItemStockPurchaseParams;
9687 rajveer 23
import in.shop2020.model.v1.inventory.OOSStatus;
5504 phani.kuma 24
import in.shop2020.model.v1.user.VoucherType;
3129 rajveer 25
import in.shop2020.thrift.clients.CatalogClient;
3907 chandransh 26
import in.shop2020.thrift.clients.ContentClient;
5946 rajveer 27
import in.shop2020.thrift.clients.InventoryClient;
2378 ankur.sing 28
import in.shop2020.thrift.clients.config.ConfigClient;
2119 ankur.sing 29
import in.shop2020.utils.CategoryManager;
2359 ankur.sing 30
import in.shop2020.utils.ConfigClientKeys;
6530 vikram.rag 31
import in.shop2020.model.v1.inventory.IgnoredInventoryUpdateItems;
32
import in.shop2020.catalog.dashboard.shared.ItemWarehouse;
2427 ankur.sing 33
import java.io.BufferedReader;
34
import java.io.FileReader;
2359 ankur.sing 35
import java.io.IOException;
2427 ankur.sing 36
import java.text.DateFormat;
37
import java.text.SimpleDateFormat;
1961 ankur.sing 38
import java.util.ArrayList;
4957 phani.kuma 39
import java.util.Arrays;
2105 ankur.sing 40
import java.util.Calendar;
2068 ankur.sing 41
import java.util.Collections;
2427 ankur.sing 42
import java.util.Date;
1992 ankur.sing 43
import java.util.HashMap;
5118 mandeep.dh 44
import java.util.HashSet;
1961 ankur.sing 45
import java.util.List;
1992 ankur.sing 46
import java.util.Map;
2359 ankur.sing 47
import java.util.Map.Entry;
5118 mandeep.dh 48
import java.util.Set;
1961 ankur.sing 49
 
2427 ankur.sing 50
import org.apache.log4j.Logger;
3907 chandransh 51
import org.apache.thrift.TException;
52
import org.apache.thrift.transport.TTransportException;
2359 ankur.sing 53
 
1961 ankur.sing 54
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
55
 
56
@SuppressWarnings("serial")
57
public class CatalogServiceImpl extends RemoteServiceServlet implements CatalogService {
58
 
3354 chandransh 59
    private static Logger logger = Logger.getLogger(CatalogServiceImpl.class);
60
 
3922 chandransh 61
    private static Logger pushToProdLogger = Logger.getLogger("pushToProdLogger");
62
 
2427 ankur.sing 63
    private static Date pushToProdDate;
64
 
3922 chandransh 65
    private static String logFile;
66
 
67
    private static int maxCount;
68
 
9640 amar.kumar 69
    private static final int EBAYSOURCE = 6;
70
    private static final int SNAPDEALSOURCE = 7;
71
    private static final int FLIPKARTSOURCE = 8;
72
 
3922 chandransh 73
    static {
74
        try {
75
            logFile = ConfigClient.getClient().get(ConfigClientKeys.push_prices_to_prod_log_file.toString());
76
            maxCount = Integer.parseInt(ConfigClient.getClient().get(ConfigClientKeys.push_prices_to_prod_max_count.toString()));    
77
        } catch(ConfigException ce) {
78
            logger.error("Unable to connect to the config server. Setting sensible defaults.", ce);
79
            logFile = "/var/log/services/pushToProductionCount/pushToProd.log";
80
            maxCount = 5;
81
        }
82
 
83
    }
84
 
3850 chandransh 85
    @Override
86
    public int getItemCountByStatus(boolean useStatus, ItemStatus itemStatus){
87
        int count = 0;
88
        try{
89
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 90
            Client catalogClient = catalogServiceClient.getClient();
3850 chandransh 91
 
92
            status stat = status.findByValue(itemStatus.getValue());
93
            count = catalogClient.getItemCountByStatus(useStatus, stat);
94
        }catch(Exception e){
95
            logger.error("Error while getting the count of items from the catalog service", e);
96
        }
97
        return count;
98
    }
99
 
100
    @Override
6530 vikram.rag 101
	public List<Item> getInventoryOutofSyncItems(int offset, int limit){
102
        List<Item> itemList = new ArrayList<Item>();
103
 
104
        try {
105
            CatalogClient catalogServiceClient = new CatalogClient();
106
            Client catalogClient = catalogServiceClient.getClient();
107
 
108
            List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getAllIgnoredInventoryUpdateItemsList(offset, limit);
109
 
110
            for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
9835 rajveer 111
                itemList.add(getItemFromThriftItem(thriftItem, null, null, null, null, null, null, null, null, null));
6530 vikram.rag 112
            }
113
        } catch (Exception e) {
114
            logger.error("Error while getting all items from the catalog service", e);
115
        }
116
        return itemList;
117
    }
118
 
119
    @Override
120
    public int getInventoryOutofSyncItemsCount(){
121
	int count=0;
122
    	try {
123
            InventoryClient inventoryServiceClient = new InventoryClient();
124
            in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
125
 
126
            count = inventoryClient.getAllIgnoredInventoryupdateItemsCount();
127
 
128
            } catch (Exception e) {
129
            logger.error("Error while getting all items from the catalog service", e);
130
        }
131
    	return count;	
132
    }    
133
 
134
    @Override
3850 chandransh 135
    public List<Item> getAllItems(int start, int limit) {
1961 ankur.sing 136
        List<Item> itemList = new ArrayList<Item>();
2359 ankur.sing 137
 
1961 ankur.sing 138
        try {
3129 rajveer 139
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 140
            Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 141
 
3850 chandransh 142
            List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getAllItemsInRange(start, limit);
2359 ankur.sing 143
 
2119 ankur.sing 144
            for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
9835 rajveer 145
                itemList.add(getItemFromThriftItem(thriftItem, null, null, null, null, null, null, null, null, null));
2119 ankur.sing 146
            }
147
        } catch (Exception e) {
3354 chandransh 148
            logger.error("Error while getting all items from the catalog service", e);
2119 ankur.sing 149
        }
150
        return itemList;
151
    }
2208 ankur.sing 152
 
3850 chandransh 153
    public List<Item> getAllActiveItems(int start, int limit){
154
        return getItemsByStatus(status.ACTIVE, start, limit);
2208 ankur.sing 155
    }
2359 ankur.sing 156
 
157
    @Override
3850 chandransh 158
    public List<Item> getAllPhasedOutItems(int start, int limit){
159
        return getItemsByStatus(status.PHASED_OUT, start, limit);
2359 ankur.sing 160
    }
161
 
162
    @Override
3850 chandransh 163
    public List<Item> getAllPausedItems(int start, int limit){
164
        return getItemsByStatus(status.PAUSED, start, limit);
2208 ankur.sing 165
    }
2359 ankur.sing 166
 
167
    @Override
3850 chandransh 168
    public List<Item> getAllInProcessItems(int start, int limit) {
169
        return getItemsByStatus(status.IN_PROCESS, start, limit);
2359 ankur.sing 170
    }
171
 
172
    @Override
3850 chandransh 173
    public List<Item> getAllContentCompleteItems(int start, int limit) {
174
        return getItemsByStatus(status.CONTENT_COMPLETE, start, limit);
2359 ankur.sing 175
    }
176
 
177
    public List<Item> getBestDeals(){
2119 ankur.sing 178
        List<Item> itemList = new ArrayList<Item>();
179
        try {
3129 rajveer 180
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 181
            Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 182
 
183
            List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getBestDeals();
1992 ankur.sing 184
            for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
9835 rajveer 185
                itemList.add(getItemFromThriftItem(thriftItem, null, null, null, null, null, null, null, null, null));
1992 ankur.sing 186
            }
2359 ankur.sing 187
        } catch(Exception e){
3354 chandransh 188
            logger.error("Error while getting the best deals from the catalog service", e);
1961 ankur.sing 189
        }
2562 chandransh 190
        //Collections.sort(itemList, new ItemsComparator());
1961 ankur.sing 191
        return itemList;
192
    }
193
 
2359 ankur.sing 194
    @Override
195
    public List<Item> getRiskyItems() {
1961 ankur.sing 196
        List<Item> itemList = new ArrayList<Item>();
197
        try {
3129 rajveer 198
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 199
            Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 200
 
201
            List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getItemsByRiskyFlag();
1992 ankur.sing 202
            for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
9835 rajveer 203
                itemList.add(getItemFromThriftItem(thriftItem, null, null, null, null, null, null, null, null, null));
1992 ankur.sing 204
            }
1961 ankur.sing 205
        } catch(Exception e){
3354 chandransh 206
            logger.error("Error while getting the risky items from the catalog service", e);
1961 ankur.sing 207
        }
2068 ankur.sing 208
        Collections.sort(itemList, new ItemsComparator());
1961 ankur.sing 209
        return itemList;
210
    }
2359 ankur.sing 211
 
1961 ankur.sing 212
    public List<Item> getBestSellers(){
213
        List<Item> itemList = new ArrayList<Item>();
2359 ankur.sing 214
 
1961 ankur.sing 215
        try {
3129 rajveer 216
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 217
            Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 218
 
1961 ankur.sing 219
            List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getBestSellers();
1992 ankur.sing 220
            for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
9835 rajveer 221
                itemList.add(getItemFromThriftItem(thriftItem, null, null, null, null, null, null, null, null, null));
1992 ankur.sing 222
            }
1961 ankur.sing 223
        } catch(Exception e){
3354 chandransh 224
            logger.error("Error while getting the best sellers from the catalog service", e);
1961 ankur.sing 225
        }
226
        return itemList;        
227
    }
6530 vikram.rag 228
 
229
    @Override
230
    public boolean addtoIgnoredInventoryUpdateItemsIdsWarehouseIds(long itemId,long warehouseId){
231
    	try {
232
				InventoryClient inventoryServiceClient = new InventoryClient();
233
				in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
234
				return inventoryClient.insertItemtoIgnoreInventoryUpdatelist(itemId, warehouseId);
235
			} catch (Exception e) {
236
            logger.error("Error while inserting item to ignore inventory update list", e);
237
            }
238
			return false;
239
    }
240
 
241
    @Override
242
    public boolean deleteFromIgnoredInventoryUpdateItemsIdsWarehouseIds(long itemId,long warehouseId){
243
    	try {
244
    			InventoryClient inventoryServiceClient = new InventoryClient();
245
    			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
246
    			return inventoryClient.deleteItemFromIgnoredInventoryUpdateList(itemId,warehouseId);
247
 
248
		} catch (Exception e) {
6532 amit.gupta 249
			logger.error("Error while inserting item to ignore inventory update list", e);
6530 vikram.rag 250
        }
251
		return false;
252
}
2359 ankur.sing 253
 
6530 vikram.rag 254
 
255
 
3872 chandransh 256
    @Override
1961 ankur.sing 257
    public List<Item> getLatestArrivals(){
258
        List<Item> itemList = new ArrayList<Item>();
2359 ankur.sing 259
 
1961 ankur.sing 260
        try {
3129 rajveer 261
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 262
            Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 263
 
1961 ankur.sing 264
            List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getLatestArrivals();
1992 ankur.sing 265
            for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
5946 rajveer 266
                //List<in.shop2020.model.v1.inventory.VendorItemPricing> vip = catalogClient.getAllItemPricing(thriftItem.getId());
9835 rajveer 267
                itemList.add(getItemFromThriftItem(thriftItem, null, null, null, null, null, null, null, null, null));
1992 ankur.sing 268
            }
1961 ankur.sing 269
        } catch(Exception e){
3354 chandransh 270
            logger.error("Error while getting the latest arrivals from the catalog service", e);
1961 ankur.sing 271
        }
272
        return itemList;
273
    }
2359 ankur.sing 274
 
3872 chandransh 275
    @Override
276
    public List<Item> searchItems(int start, int limit, List<String> searchTerms) {
277
        List<Item> itemList = new ArrayList<Item>();
278
 
279
        try {
280
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 281
            Client catalogClient = catalogServiceClient.getClient();
3872 chandransh 282
 
283
            List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.searchItemsInRange(searchTerms, start, limit);
284
            for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
9835 rajveer 285
                itemList.add(getItemFromThriftItem(thriftItem, null, null, null, null, null, null, null, null,null));
3872 chandransh 286
            }
287
        } catch(Exception e){
288
            logger.error("Error while getting the search results from the catalog service", e);
289
        }
290
        return itemList;
291
    }
292
 
293
    @Override
294
    public int getSearchResultCount(List<String> searchTerms){
295
        int count = 0;
296
        try {
297
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 298
            Client catalogClient = catalogServiceClient.getClient();
3872 chandransh 299
 
300
            count = catalogClient.getSearchResultCount(searchTerms);
301
        } catch(Exception e){
302
            logger.error("Error while getting the search results from the catalog service", e);
303
        }
304
 
305
        return count;
306
    }
307
 
1961 ankur.sing 308
    public Item getItem(long itemId){
309
        try{
3129 rajveer 310
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 311
            Client catalogClient = catalogServiceClient.getClient();
312
            InventoryClient inventoryServiceClient = new InventoryClient();
313
            in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
1961 ankur.sing 314
            in.shop2020.model.v1.catalog.Item thriftItem = catalogClient.getItem(itemId);
5427 amit.gupta 315
            Long catalogItemId = thriftItem.getCatalogItemId();
316
            List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getItemsByCatalogId(catalogItemId);
317
            List <Long> sameItemsWithDifferentColors = new ArrayList<Long>();
318
            if(thriftItems.size()>1){
319
	            for(in.shop2020.model.v1.catalog.Item tItem : thriftItems ){
320
	            	Long id = tItem.getId();
321
		        	if(!id.equals(itemId)){
322
		        		sameItemsWithDifferentColors.add(id); 
323
		        	}
324
	            }
325
            }
5946 rajveer 326
            List<in.shop2020.model.v1.inventory.VendorItemPricing> vip = inventoryClient.getAllItemPricing(thriftItem.getId());
327
            List<in.shop2020.model.v1.inventory.VendorItemMapping> vim = inventoryClient.getVendorItemMappings(thriftItem.getId());
3558 rajveer 328
            List<in.shop2020.model.v1.catalog.SourceItemPricing> sip = catalogClient.getAllSourcePricing(thriftItem.getId());
4423 phani.kuma 329
            List<in.shop2020.model.v1.catalog.Item> sit = catalogClient.getAllSimilarItems(thriftItem.getId());
5946 rajveer 330
            in.shop2020.model.v1.inventory.ItemInventory itemInventory = inventoryClient.getItemInventoryByItemId(thriftItem.getId());
6813 amar.kumar 331
            ItemStockPurchaseParams stockPurchaseParams = inventoryClient.getItemStockPurchaseParams(thriftItem.getId());
9835 rajveer 332
            Map<Long, String> saleHistory = new HashMap<Long, String>();
333
            List<OOSStatus> oosStatuses = inventoryClient.getOosStatusesForXDaysForItem(thriftItem.getId(), 0, 5);
334
            String lastNdaySale = getOosString(oosStatuses);
335
            saleHistory.put(0L,lastNdaySale);
336
            List<OOSStatus> webOosStatuses = inventoryClient.getOosStatusesForXDaysForItem(thriftItem.getId(), 1, 5);
337
            String webLastNdaySale = getOosString(webOosStatuses);
338
            saleHistory.put(1L,webLastNdaySale);
339
            List<OOSStatus> amzOosStatuses = inventoryClient.getOosStatusesForXDaysForItem(thriftItem.getId(), 3, 5);
340
            String amzLastNdaySale = getOosString(amzOosStatuses);
341
            saleHistory.put(3L,amzLastNdaySale);
342
            List<OOSStatus> ebayOosStatuses = inventoryClient.getOosStatusesForXDaysForItem(thriftItem.getId(), 6, 5);
343
            String ebayLastNdaySale = getOosString(ebayOosStatuses);
344
            saleHistory.put(6L,ebayLastNdaySale);
345
            List<OOSStatus> spdOosStatuses = inventoryClient.getOosStatusesForXDaysForItem(thriftItem.getId(), 7, 5);
346
            String spdLastNdaySale = getOosString(spdOosStatuses);
347
            saleHistory.put(7L,spdLastNdaySale);
348
            List<OOSStatus> fktOosStatuses = inventoryClient.getOosStatusesForXDaysForItem(thriftItem.getId(), 8, 5);
349
            String fktLastNdaySale = getOosString(fktOosStatuses);
350
            saleHistory.put(8L,fktLastNdaySale);
9687 rajveer 351
 
9835 rajveer 352
 
7190 amar.kumar 353
            Long freebieItemId = catalogClient.getFreebieForItem(thriftItem.getId());
5504 phani.kuma 354
            List<in.shop2020.model.v1.catalog.VoucherItemMapping> tvouchers = catalogClient.getAllItemVouchers(thriftItem.getId());
9835 rajveer 355
            Item it = getItemFromThriftItem(thriftItem, vip, vim, sip, sit, itemInventory, tvouchers, stockPurchaseParams, saleHistory, freebieItemId);
5427 amit.gupta 356
            it.setSameItemsWithDifferentColors(sameItemsWithDifferentColors);
357
            return it;
1961 ankur.sing 358
        }catch(Exception e){
3354 chandransh 359
            logger.error("Error while getting the item from the catalog service", e);
1961 ankur.sing 360
        }
361
        return null;
362
    }
9835 rajveer 363
 
364
    private String getOosString(List<OOSStatus> oosStatuses){
365
    	String lastNdaySale = "";
366
        for(OOSStatus oosStatus : oosStatuses){
367
        	if(oosStatus.isIs_oos()){
368
        		lastNdaySale += "X-";
369
        	}else{
370
        		lastNdaySale += oosStatus.getNum_orders() + "-";
371
        	}
372
        }
373
        lastNdaySale = lastNdaySale.substring(0, lastNdaySale.length()-1);
374
        return lastNdaySale;
375
    }
2359 ankur.sing 376
 
1961 ankur.sing 377
    @Override
1992 ankur.sing 378
    public boolean updateItem(Item item) {
3354 chandransh 379
        logger.info("Updating item with Id: " + item.getId());
1961 ankur.sing 380
        try{
3129 rajveer 381
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 382
            Client catalogClient = catalogServiceClient.getClient();
383
            InventoryClient inventoryServiceClient = new InventoryClient();
384
            in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
385
 
1992 ankur.sing 386
            in.shop2020.model.v1.catalog.Item tItem = catalogClient.getItem(item.getId());
2126 ankur.sing 387
            setThriftItemParams(tItem, item);
2359 ankur.sing 388
 
2105 ankur.sing 389
            long rItemId;
390
            if((rItemId = catalogClient.updateItem(tItem)) != item.getId()) {
3354 chandransh 391
                logger.error("Error updating item, returned Item Id: " + rItemId);
2105 ankur.sing 392
                return false;
393
            }
3354 chandransh 394
            logger.info("Successfully updated item with id: " + item.getId());
2359 ankur.sing 395
 
396
            Map<String, VendorItemMapping> vendorMappings = item.getVendorKeysMap();
2119 ankur.sing 397
            if(vendorMappings != null && !vendorMappings.isEmpty()) {
5946 rajveer 398
                in.shop2020.model.v1.inventory.VendorItemMapping tVendorMapping;
2359 ankur.sing 399
 
400
                for(Entry<String, VendorItemMapping> e : vendorMappings.entrySet()) {
5946 rajveer 401
                    tVendorMapping = new in.shop2020.model.v1.inventory.VendorItemMapping();
2359 ankur.sing 402
                    VendorItemMapping v = e.getValue();
2119 ankur.sing 403
                    tVendorMapping.setVendorId(v.getVendorId());
404
                    tVendorMapping.setItemKey(v.getItemKey());
405
                    tVendorMapping.setItemId(item.getId());
5946 rajveer 406
                    inventoryClient.addVendorItemMapping(e.getKey().substring(e.getKey().indexOf(Item.KEY_SEPARATOR)+1), tVendorMapping);
3354 chandransh 407
                    logger.info("Updates VendorItemMapping: " + tVendorMapping.toString());
2119 ankur.sing 408
                }
409
            }
2359 ankur.sing 410
 
6813 amar.kumar 411
            if(item.getMinStockLevel()!=0 || item.getNumOfDaysStock()!=0) {
412
            	inventoryClient.updateItemStockPurchaseParams(item.getId(), item.getNumOfDaysStock(),
413
            			item.getMinStockLevel());
414
            }
415
 
7239 amar.kumar 416
            if(item.getFreebieItemId()!=null) {
7190 amar.kumar 417
            	in.shop2020.model.v1.catalog.FreebieItem freebieItem = new in.shop2020.model.v1.catalog.FreebieItem();
418
            	freebieItem.setItemId(item.getId());
419
            	freebieItem.setFreebieItemId(item.getFreebieItemId());
420
            	catalogClient.addOrUpdateFreebieForItem(freebieItem);
421
            }
422
 
2119 ankur.sing 423
            Map<Long, VendorPricings> vendorPricings = item.getVendorPricesMap();
424
            if(vendorPricings != null && !vendorPricings.isEmpty()) {
5946 rajveer 425
                in.shop2020.model.v1.inventory.VendorItemPricing tVendorPricing;
2119 ankur.sing 426
                for(VendorPricings v : vendorPricings.values()) {
5946 rajveer 427
                    tVendorPricing = new in.shop2020.model.v1.inventory.VendorItemPricing();
2105 ankur.sing 428
                    tVendorPricing.setVendorId(v.getVendorId());
429
                    tVendorPricing.setItemId(item.getId());
430
                    tVendorPricing.setMop(v.getMop());
431
                    tVendorPricing.setTransferPrice(v.getTransferPrice());
432
                    tVendorPricing.setDealerPrice(v.getDealerPrice());
6759 amar.kumar 433
                    tVendorPricing.setNlc(v.getNlc());
5946 rajveer 434
                    inventoryClient.addVendorItemPricing(tVendorPricing);
3354 chandransh 435
                    logger.info("Updated VendorItemPricing: " + tVendorPricing.toString());
2105 ankur.sing 436
                }
437
            }
3558 rajveer 438
 
439
            Map<Long, SourcePricings> sourcePricings = item.getSourcePricesMap();
440
            if(sourcePricings != null && !sourcePricings.isEmpty()) {
441
                in.shop2020.model.v1.catalog.SourceItemPricing tSourcePricings;
442
                for(SourcePricings s : sourcePricings.values()) {
443
                	tSourcePricings = new in.shop2020.model.v1.catalog.SourceItemPricing();
444
                	tSourcePricings.setSourceId(s.getSourceId());
445
                    tSourcePricings.setItemId(item.getId());
446
                    tSourcePricings.setMrp(s.getMrp());
447
                    tSourcePricings.setSellingPrice(s.getSellingPrice());
448
                    catalogClient.addSourceItemPricing(tSourcePricings);
449
                    logger.info("Updated SourceItemPricing: " + tSourcePricings.toString());
450
                }
451
            }
452
 
2105 ankur.sing 453
        }catch(Exception e){
3354 chandransh 454
            logger.error("Error while updating item: ", e);
2427 ankur.sing 455
            return false;
2105 ankur.sing 456
        }
457
        return true;
1961 ankur.sing 458
    }
2359 ankur.sing 459
 
6530 vikram.rag 460
    @Override
461
    public List<Long> getMonitoredWarehouseIdsForVendors(List<Long> vendorIds){
462
    	List<Long> monitoredWarehouseids=null;
463
    	 try {
464
			InventoryClient inventoryServiceClient = new InventoryClient();
465
			 in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
466
			 monitoredWarehouseids = inventoryClient.getMonitoredWarehouseForVendors(vendorIds);
467
		} catch (Exception e) {
468
			logger.error("Error while getting Monitored warehouse for vendor: ", e);
469
		}
470
		return monitoredWarehouseids;
471
 
472
    }
473
 
474
    @Override
475
    public List<ItemWarehouse> getignoredInventoryUpdateItemsIdsWarehouseIds(){
476
		List<ItemWarehouse> ignoredItemIdwarehouseIdList = new ArrayList<ItemWarehouse>();
477
    	try {
2359 ankur.sing 478
 
6530 vikram.rag 479
			InventoryClient inventoryServiceClient = new InventoryClient();
480
			in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
481
			List<IgnoredInventoryUpdateItems> ignoredInventoryUpdateItems = inventoryClient.getIgnoredWarehouseidsAndItemids();
482
			for(IgnoredInventoryUpdateItems ignoredInventoryUpdateItem:ignoredInventoryUpdateItems){
483
				ignoredItemIdwarehouseIdList.add(new ItemWarehouse(ignoredInventoryUpdateItem.getItemId(),ignoredInventoryUpdateItem.getWarehouseId()));
484
			}
485
 
486
 
487
		} catch (Exception e) {
488
			logger.error("Error while getting Monitored warehouseid and itemid : ", e);
489
		}
490
		return ignoredItemIdwarehouseIdList;
491
 
492
    }
2066 ankur.sing 493
    @Override
494
    public Map<Long, String> getAllVendors() {
495
        Map<Long, String> vendorMap = new HashMap<Long, String>();
496
        try {
5946 rajveer 497
            InventoryClient inventoryServiceClient = new InventoryClient();
498
            in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
499
 
500
            List<in.shop2020.model.v1.inventory.Vendor> vendors = inventoryClient.getAllVendors();
2359 ankur.sing 501
 
5946 rajveer 502
            for(in.shop2020.model.v1.inventory.Vendor v : vendors) {
2066 ankur.sing 503
                vendorMap.put(v.getId(), v.getName());
504
            }
505
        } catch (Exception e) {
3354 chandransh 506
            logger.error("Error while getting all the vendors: ", e);
2066 ankur.sing 507
        }
508
        return vendorMap;
509
    }
510
 
511
    @Override
3558 rajveer 512
    public Map<Long, String> getAllSources() {
513
        Map<Long, String> sourceMap = new HashMap<Long, String>();
514
        try {
515
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 516
            Client catalogClient = catalogServiceClient.getClient();
3558 rajveer 517
 
518
            List<in.shop2020.model.v1.catalog.Source> sources = catalogClient.getAllSources();
519
 
520
            for(in.shop2020.model.v1.catalog.Source s : sources) {
521
            	sourceMap.put(s.getId(), s.getName());
522
            }
523
        } catch (Exception e) {
524
            logger.error("Error while getting all the vendors: ", e);
525
        }
526
        return sourceMap;
527
    }
528
 
529
    @Override
5118 mandeep.dh 530
    public Map<Long, String> getShippingWarehouses() {
531
        Map<Long, String> warehouseMap = new HashMap<Long, String>();
532
        Set<Long> shippingLocations = new HashSet<Long>();
533
        try {
5946 rajveer 534
            InventoryClient inventoryServiceClient = new InventoryClient();
535
            in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
536
 
537
            List<in.shop2020.model.v1.inventory.Warehouse> warehouses = inventoryClient.getAllWarehouses(true);
5118 mandeep.dh 538
 
5946 rajveer 539
            for(in.shop2020.model.v1.inventory.Warehouse warehouse : warehouses) {
5118 mandeep.dh 540
                shippingLocations.add(warehouse.getShippingWarehouseId());
541
            }
542
 
5946 rajveer 543
            for(in.shop2020.model.v1.inventory.Warehouse warehouse : warehouses) {
5118 mandeep.dh 544
                if (shippingLocations.contains(warehouse.getId())) {
545
                    warehouseMap.put(warehouse.getId(), warehouse.getDisplayName());
546
                }                
547
            }
548
        } catch (Exception e) {
549
            logger.error("Error while getting all the warehouses:", e );
550
        }
551
        return warehouseMap;
552
    }
553
 
554
    @Override
2066 ankur.sing 555
    public Map<Long, String> getAllWarehouses() {
556
        Map<Long, String> warehouseMap = new HashMap<Long, String>();
557
        try {
5946 rajveer 558
        	InventoryClient inventoryServiceClient = new InventoryClient();
559
            in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
2359 ankur.sing 560
 
5946 rajveer 561
            List<in.shop2020.model.v1.inventory.Warehouse> warehouses = inventoryClient.getAllWarehouses(true);
2359 ankur.sing 562
 
5946 rajveer 563
            for(in.shop2020.model.v1.inventory.Warehouse w : warehouses) {
2066 ankur.sing 564
                warehouseMap.put(w.getId(), w.getDisplayName());
565
            }
566
        } catch (Exception e) {
3354 chandransh 567
            logger.error("Error while getting all the warehouses:", e );
2066 ankur.sing 568
        }
569
        return warehouseMap;
570
    }
2105 ankur.sing 571
 
572
    @Override
573
    public long addItem(Item item) {
574
        long itemId = 0;
575
        try {
3129 rajveer 576
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 577
            Client catalogClient = catalogServiceClient.getClient();
578
            InventoryClient inventoryServiceClient = new InventoryClient();
579
            in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
2126 ankur.sing 580
 
2105 ankur.sing 581
            in.shop2020.model.v1.catalog.Item tItem = new in.shop2020.model.v1.catalog.Item();
2126 ankur.sing 582
            setThriftItemParams(tItem, item);
2105 ankur.sing 583
            itemId = catalogClient.addItem(tItem);
584
 
2119 ankur.sing 585
            Map<Long, VendorPricings> vendorPricings = item.getVendorPricesMap();
586
            if(vendorPricings != null && !vendorPricings.isEmpty()) {
5946 rajveer 587
                in.shop2020.model.v1.inventory.VendorItemPricing tVendorPricing;
2119 ankur.sing 588
                for(VendorPricings v : vendorPricings.values()) {
5946 rajveer 589
                    tVendorPricing = new in.shop2020.model.v1.inventory.VendorItemPricing();
2119 ankur.sing 590
                    tVendorPricing.setVendorId(v.getVendorId());
591
                    tVendorPricing.setItemId(itemId);
592
                    tVendorPricing.setMop(v.getMop());
593
                    tVendorPricing.setTransferPrice(v.getTransferPrice());
6759 amar.kumar 594
                    tVendorPricing.setNlc(v.getNlc());
2119 ankur.sing 595
                    tVendorPricing.setDealerPrice(v.getDealerPrice());
5946 rajveer 596
                    inventoryClient.addVendorItemPricing(tVendorPricing);
2119 ankur.sing 597
                }
598
            }
2359 ankur.sing 599
 
600
            Map<String, VendorItemMapping> vendorKeysMap = item.getVendorKeysMap();
2119 ankur.sing 601
            if(vendorKeysMap != null && !vendorKeysMap.isEmpty()) {
5946 rajveer 602
                in.shop2020.model.v1.inventory.VendorItemMapping tVendorMapping;
2359 ankur.sing 603
                for(Entry<String, VendorItemMapping> e : vendorKeysMap.entrySet()) {
5946 rajveer 604
                    tVendorMapping = new in.shop2020.model.v1.inventory.VendorItemMapping();
2359 ankur.sing 605
                    VendorItemMapping v = e.getValue();
2105 ankur.sing 606
                    tVendorMapping.setVendorId(v.getVendorId());
607
                    tVendorMapping.setItemKey(v.getItemKey());
608
                    tVendorMapping.setItemId(itemId);
5946 rajveer 609
                    inventoryClient.addVendorItemMapping(e.getKey().substring(e.getKey().indexOf(Item.KEY_SEPARATOR)+1), tVendorMapping);
2105 ankur.sing 610
                }
611
            }
6813 amar.kumar 612
 
613
        	inventoryClient.updateItemStockPurchaseParams(itemId, item.getNumOfDaysStock(),
614
        			item.getMinStockLevel());
7190 amar.kumar 615
 
616
        	if(item.getFreebieItemId()!=null && item.getFreebieItemId()!=0) {
617
        		in.shop2020.model.v1.catalog.FreebieItem freebieItem = 
618
        			new in.shop2020.model.v1.catalog.FreebieItem();
619
        		freebieItem.setItemId(itemId);
620
        		freebieItem.setFreebieItemId(item.getFreebieItemId());
621
        		catalogClient.addOrUpdateFreebieForItem(freebieItem);
622
        	}
623
 
2105 ankur.sing 624
        } catch (Exception e) {
3354 chandransh 625
            logger.error("Error while adding an item: ", e);
2105 ankur.sing 626
        }
627
        return itemId;
628
    }
2119 ankur.sing 629
 
630
    @Override
4725 phani.kuma 631
    public long checkSimilarItem(String brand, String modelNumber, String modelName, String color) {
2359 ankur.sing 632
 
2119 ankur.sing 633
        try {
3129 rajveer 634
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 635
            Client catalogClient = catalogServiceClient.getClient();
4725 phani.kuma 636
            return catalogClient.checkSimilarItem(brand, modelNumber, modelName, color);
2119 ankur.sing 637
        } catch (Exception e) {
3354 chandransh 638
            logger.error("Error while checking for a similar item: ", e);
2119 ankur.sing 639
        }
640
        return 0;
641
    }
2359 ankur.sing 642
 
2126 ankur.sing 643
    private void setThriftItemParams(in.shop2020.model.v1.catalog.Item tItem, Item item) {
644
        tItem.setId(tItem.getId());
645
        tItem.setProductGroup(item.getProductGroup());
646
        tItem.setBrand(item.getBrand());
647
        tItem.setModelName(item.getModelName());
648
        tItem.setModelNumber(item.getModelNumber());
649
        tItem.setColor(item.getColor());
6241 amit.gupta 650
        tItem.setShowSellingPrice(item.isShowSellingPrice());
9841 rajveer 651
        tItem.setHoldOverride(item.isHoldOverride());
2359 ankur.sing 652
        tItem.setStatus_description(item.getItemStatusDesc());
2126 ankur.sing 653
        tItem.setComments(item.getComments());
2359 ankur.sing 654
 
2489 ankur.sing 655
        if(item.getMrp() != null) {
2126 ankur.sing 656
            tItem.setMrp(item.getMrp());
657
        }
3354 chandransh 658
 
5586 phani.kuma 659
        if(item.getCatalogItemId() != null) {
660
            tItem.setCatalogItemId(item.getCatalogItemId());
661
        }
662
 
2489 ankur.sing 663
        if(item.getSellingPrice() != null) {
2126 ankur.sing 664
            tItem.setSellingPrice(item.getSellingPrice());
665
        }
3354 chandransh 666
 
2489 ankur.sing 667
        if(item.getWeight() != null) {
2126 ankur.sing 668
            tItem.setWeight(item.getWeight());
669
        }
3354 chandransh 670
 
3359 chandransh 671
        if(item.getExpectedDelay() != null) {
672
            tItem.setExpectedDelay(item.getExpectedDelay());
2489 ankur.sing 673
        }
3354 chandransh 674
 
4413 anupam.sin 675
        tItem.setIsWarehousePreferenceSticky(item.isWarehouseStickiness());
676
 
4506 phani.kuma 677
        if(item.getPreferredVendor() != null) {
678
            tItem.setPreferredVendor(item.getPreferredVendor());
679
        }
6838 vikram.rag 680
        tItem.setPreferredInsurer(item.getPreferredInsurer());
7291 vikram.rag 681
 
682
        if(item.getAsin() != null) {
683
            tItem.setAsin(item.getAsin());
684
        }
7305 amit.gupta 685
        if(item.getHoldInventory()!= null) {
686
        	tItem.setHoldInventory(item.getHoldInventory());
687
        }
688
        else{
689
        	tItem.setHoldInventory(0);
690
        }	
691
        if(item.getDefaultInventory()!=null){
692
        	tItem.setDefaultInventory(item.getDefaultInventory());
693
        }
694
        else{
695
        	tItem.setDefaultInventory(0);
696
        }
2126 ankur.sing 697
        tItem.setBestDealText(item.getBestDealsText());
6777 vikram.rag 698
        tItem.setBestDealsDetailsText(item.getBestDealsDetailsText());
699
        tItem.setBestDealsDetailsLink(item.getBestDealsDetailsLink());
2489 ankur.sing 700
        if(item.getBestDealsValue() != null) {
2126 ankur.sing 701
            tItem.setBestDealValue(item.getBestDealsValue());
702
        }
3354 chandransh 703
 
2489 ankur.sing 704
        if(item.getBestSellingRank() != null) {
2126 ankur.sing 705
            tItem.setBestSellingRank(item.getBestSellingRank());
706
        }
3354 chandransh 707
 
2126 ankur.sing 708
        tItem.setDefaultForEntity(item.isDefaultForEntity());
2252 ankur.sing 709
        tItem.setRisky(item.isRisky());
5384 phani.kuma 710
        tItem.setHasItemNo(item.isHasItemNo());
711
 
712
        if(item.isItemType()) {
713
        	tItem.setType(ItemType.SERIALIZED);
714
        }
715
        else {
716
        	tItem.setType(ItemType.NON_SERIALIZED);
717
        }
718
 
2489 ankur.sing 719
        if(item.getStartDate() != null) {
720
            tItem.setStartDate(item.getStartDate());
721
        }
3354 chandransh 722
 
5217 amit.gupta 723
        if(item.getExpectedArrivalDate() != null) {
724
        	tItem.setExpectedArrivalDate(item.getExpectedArrivalDate());
725
        } else {
726
        	tItem.unsetComingSoonStartDate();
727
        	tItem.unsetExpectedArrivalDate();
728
        	if(status.COMING_SOON.equals(tItem.getItemStatus())){
6277 amit.gupta 729
        		tItem.setItemStatus(status.CONTENT_COMPLETE);
730
        		tItem.setStatus_description("Content generation completed");
5217 amit.gupta 731
        	}
732
        }
733
 
734
        if(item.getComingSoonStartDate() != null) {
735
        	tItem.setComingSoonStartDate(item.getComingSoonStartDate());
736
        } else {
737
        	tItem.unsetComingSoonStartDate();
738
        }
739
 
2489 ankur.sing 740
        if(item.getRetireDate() != null) {
741
            tItem.setRetireDate(item.getRetireDate());
742
        }
3354 chandransh 743
 
2126 ankur.sing 744
        tItem.setUpdatedOn(Calendar.getInstance().getTimeInMillis());
745
    }
746
 
747
    @Override
748
    public void pauseItem(long itemId) {
749
        try {
3129 rajveer 750
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 751
            Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 752
 
2126 ankur.sing 753
            catalogClient.changeItemStatus(itemId, Calendar.getInstance().getTimeInMillis(), status.PAUSED);
754
        } catch (Exception e) {
3354 chandransh 755
            logger.error("Error while pausing the item: " + itemId, e);
2126 ankur.sing 756
        }
2359 ankur.sing 757
 
2126 ankur.sing 758
    }
759
 
760
    @Override
761
    public void markInProcess(long itemId) {
762
        try {
3129 rajveer 763
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 764
            Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 765
 
2126 ankur.sing 766
            catalogClient.changeItemStatus(itemId, Calendar.getInstance().getTimeInMillis(), status.IN_PROCESS);
767
        } catch (Exception e) {
3354 chandransh 768
            logger.error("Error while marking in-process the item: " + itemId, e);
2126 ankur.sing 769
        }
770
    }
2359 ankur.sing 771
 
2126 ankur.sing 772
    @Override
773
    public void phaseoutItem(long itemId) {
774
        try {
3129 rajveer 775
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 776
            Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 777
 
2126 ankur.sing 778
            catalogClient.changeItemStatus(itemId, Calendar.getInstance().getTimeInMillis(), status.PHASED_OUT);
779
        } catch (Exception e) {
3354 chandransh 780
            logger.error("Error while phasing out the item: " + itemId, e);
2126 ankur.sing 781
        }
782
    }
2359 ankur.sing 783
 
2126 ankur.sing 784
    @Override
785
    public void activateItem(long itemId) {
786
        try {
3129 rajveer 787
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 788
            Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 789
 
2126 ankur.sing 790
            catalogClient.changeItemStatus(itemId, Calendar.getInstance().getTimeInMillis(), status.ACTIVE);
791
        } catch (Exception e) {
3354 chandransh 792
            logger.error("Error while activating the item: " + itemId, e);
2126 ankur.sing 793
        }
794
    }
2359 ankur.sing 795
 
796
    @Override
797
    public boolean changeItemRiskyFlag(long itemId, boolean risky) {
798
        try {
4354 mandeep.dh 799
            logger.info("Updating risky flag for item id: " + itemId + " to " + risky);
2359 ankur.sing 800
            // Initialize client for staging server
3129 rajveer 801
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 802
            Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 803
 
804
            // Initialize client for production server
3165 chandransh 805
            CatalogClient catalogServiceClient_Prod = new CatalogClient(ConfigClientKeys.catalog_service_server_host_prod.toString(),
2359 ankur.sing 806
                    ConfigClientKeys.catalog_service_server_port.toString());
5946 rajveer 807
            Client catalogClient_Prod = catalogServiceClient_Prod.getClient();
2359 ankur.sing 808
            catalogClient.changeItemRiskyFlag(itemId, risky);
809
 
810
            try{
811
                catalogClient_Prod.changeItemRiskyFlag(itemId, risky);
812
            }catch(Exception e){
3354 chandransh 813
                logger.error("Error while updating item's risky flag on production", e);
2359 ankur.sing 814
                // If not able to change risky flag on production, revert on staging and return false (to show error to user).
815
                catalogClient.changeItemRiskyFlag(itemId, !risky);        
816
                return false;
817
            }
818
        } catch (Exception e) {
3354 chandransh 819
            logger.error("Error while updating item's risky flag on staging", e);
2359 ankur.sing 820
            return false;
821
        }
822
        return true;
823
    }
824
 
2427 ankur.sing 825
 
826
    /**
4762 phani.kuma 827
     * Retuns list of Items filtered by category (column is product_group in catalog.item table)
2427 ankur.sing 828
     * This list is used to generate master sheet (excel sheet)
829
     * @param category
4957 phani.kuma 830
     * @param brand
2427 ankur.sing 831
     * @return
832
     */
4957 phani.kuma 833
    public List<Item> getItemsForMasterSheet(String category, String brand) {
2359 ankur.sing 834
        List<Item> itemList = new ArrayList<Item>();
835
        try {
3129 rajveer 836
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 837
            Client catalogClient = catalogServiceClient.getClient();
838
            InventoryClient inventoryServiceClient = new InventoryClient();
839
            in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
2359 ankur.sing 840
 
4957 phani.kuma 841
            List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getItemsForMasterSheet(category, brand);
2359 ankur.sing 842
 
843
            for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
5946 rajveer 844
                List<in.shop2020.model.v1.inventory.VendorItemPricing> vip = inventoryClient.getAllItemPricing(thriftItem.getId());
845
                List<in.shop2020.model.v1.inventory.VendorItemMapping> vim = inventoryClient.getVendorItemMappings(thriftItem.getId());
3558 rajveer 846
                List<in.shop2020.model.v1.catalog.SourceItemPricing> sip = catalogClient.getAllSourcePricing(thriftItem.getId());
9836 rajveer 847
                itemList.add(getItemFromThriftItem(thriftItem, vip, vim, sip, null, null, null, null, null, null));
2359 ankur.sing 848
            }
849
        } catch (Exception e) {
4762 phani.kuma 850
            logger.error("Error while getting items by category: " + category, e);
2359 ankur.sing 851
        }
852
        Collections.sort(itemList, new ItemsComparator());
853
        return itemList;
854
    }
855
 
856
    @Override
2427 ankur.sing 857
    public String updateItemOnProduction(Item item) {
5706 amit.gupta 858
    	if(!canPushToProduction()) {
859
    		// If we can't push to production, then return that message to user
860
    		// else move forward with update.
861
    		return "Maximum push to production count reached for today";
862
    	}
863
    	List<Long> itemIds = item.getSameItemsWithDifferentColors();
864
    	List<Item> items = new ArrayList<Item>();
865
    	items.add(item);
866
    	for(Long itemId : itemIds) {
867
    		try {
868
    			CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 869
    			Client catalogClient = catalogServiceClient.getClient();
870
    			InventoryClient inventoryServiceClient = new InventoryClient();
871
                in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
872
 
5706 amit.gupta 873
    			in.shop2020.model.v1.catalog.Item thriftItem = catalogClient.getItem(itemId);
5946 rajveer 874
				List<in.shop2020.model.v1.inventory.VendorItemPricing> vip = inventoryClient.getAllItemPricing(thriftItem.getId());
875
				List<in.shop2020.model.v1.inventory.VendorItemMapping> vim = inventoryClient.getVendorItemMappings(thriftItem.getId());
5706 amit.gupta 876
				List<in.shop2020.model.v1.catalog.SourceItemPricing> sip = catalogClient.getAllSourcePricing(thriftItem.getId());
9836 rajveer 877
				items.add(getItemFromThriftItem(thriftItem, vip, vim, sip, null, null, null, null, null, null));
5706 amit.gupta 878
    		} catch (Exception e) {
879
    			logger.error("Could not fetch item for : " + itemId, e);
880
    			return "Could not push to production. No item got pushed.";
881
    		}
882
    	}
883
    	for (Item it : items) {
884
	        logger.info("Update item on production call, Item Id: " + it.getId());
885
 
886
	        try{
887
	            CatalogClient catalogServiceClient_Prod = new CatalogClient( 
888
	                    ConfigClientKeys.catalog_service_server_host_prod.toString(),
889
	                    ConfigClientKeys.catalog_service_server_port.toString());
890
 
5946 rajveer 891
	            Client catalogClient_Prod = catalogServiceClient_Prod.getClient();
5706 amit.gupta 892
 
893
	            in.shop2020.model.v1.catalog.Item tItem = catalogClient_Prod.getItem(it.getId());
894
 
5946 rajveer 895
	            InventoryClient inventoryServiceClient = new InventoryClient();
896
	            in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
897
 
5706 amit.gupta 898
	            if(it.getMrp() != null) {
899
	                tItem.setMrp(it.getMrp());
900
	            }
901
 
902
	            if(it.getSellingPrice() != null) {
903
	                tItem.setSellingPrice(it.getSellingPrice());
904
	            }
905
 
7700 amit.gupta 906
                tItem.setBestDealText(it.getBestDealsText());
7198 amar.kumar 907
 
6826 amit.gupta 908
	            if (it.getItemStatusValue()  == ItemStatus.ACTIVE.getValue() || it.getItemStatusValue()  == ItemStatus.PAUSED.getValue()) {
909
	            	tItem.setItemStatus(status.findByValue(it.getItemStatusValue()));
910
	            	tItem.setStartDate(it.getStartDate());
911
	            }
5706 amit.gupta 912
	            long rItemId;
913
	            if((rItemId = catalogClient_Prod.updateItem(tItem)) != it.getId()) {
914
	                logger.error("Error updating item on production, returned Item Id: " + rItemId);
915
	                return "Error updating item prices on production";
916
	            }
7198 amar.kumar 917
	            if(it.getFreebieItemId() !=null && it.getFreebieItemId()!=0) {
918
	            	in.shop2020.model.v1.catalog.FreebieItem freebieItem = new in.shop2020.model.v1.catalog.FreebieItem();
919
	            	freebieItem.setItemId(it.getId());
920
	            	freebieItem.setFreebieItemId(it.getFreebieItemId());
921
	            	catalogClient_Prod.addOrUpdateFreebieForItem(freebieItem);
922
	            }
5706 amit.gupta 923
	            logger.info("Successfully updated item: " + it.getId());
924
 
925
	            StringBuilder sb = new StringBuilder();
926
 
927
	            Map<Long, VendorPricings> vendorPricings = it.getVendorPricesMap();
928
	            if(vendorPricings != null && !vendorPricings.isEmpty()) {
5946 rajveer 929
	                in.shop2020.model.v1.inventory.VendorItemPricing tVendorPricing;
5706 amit.gupta 930
	                for(VendorPricings v : vendorPricings.values()) {
5946 rajveer 931
	                    tVendorPricing = new in.shop2020.model.v1.inventory.VendorItemPricing();
5706 amit.gupta 932
	                    tVendorPricing.setVendorId(v.getVendorId());
933
	                    tVendorPricing.setItemId(it.getId());
934
	                    tVendorPricing.setMop(v.getMop());
935
	                    tVendorPricing.setTransferPrice(v.getTransferPrice());
6759 amar.kumar 936
	                    tVendorPricing.setNlc(v.getNlc());
5706 amit.gupta 937
	                    tVendorPricing.setDealerPrice(v.getDealerPrice());
5946 rajveer 938
	                    inventoryClient.addVendorItemPricing(tVendorPricing);
5706 amit.gupta 939
	                    logger.info("VendorItemPricing updated. " + tVendorPricing.toString());
6759 amar.kumar 940
	                    sb.append("[VId:" + v.getVendorId() + ",MOP=" + v.getMop() + ",TP=" + v.getTransferPrice() + ",NLC= " +v.getNlc() + ",DP=" + v.getDealerPrice() + "], ");
5706 amit.gupta 941
	                }
942
	            }
943
 
944
	            Map<String, VendorItemMapping> vendorMappings = it.getVendorKeysMap();
945
	            if(vendorMappings != null && !vendorMappings.isEmpty()) {
5946 rajveer 946
	                in.shop2020.model.v1.inventory.VendorItemMapping tVendorMapping;
5706 amit.gupta 947
	                for(VendorItemMapping vendorItemMapping : vendorMappings.values()) {
5946 rajveer 948
	                    tVendorMapping = new in.shop2020.model.v1.inventory.VendorItemMapping();
5706 amit.gupta 949
	                    tVendorMapping.setVendorId(vendorItemMapping.getVendorId());
950
	                    tVendorMapping.setItemId(it.getId());
951
	                    tVendorMapping.setItemKey(vendorItemMapping.getItemKey());
5946 rajveer 952
	                    inventoryClient.addVendorItemMapping(vendorItemMapping.getItemKey(), tVendorMapping);
5706 amit.gupta 953
	                    logger.info("VendorItemMapping updated. " + tVendorMapping.toString());
954
	                    sb.append("[VId:" + vendorItemMapping.getVendorId() + ",ItemKey=" + vendorItemMapping.getItemKey() + "], ");
955
	                }
956
	            }
957
 
958
	            Map<Long, SourcePricings> sourcePricings = it.getSourcePricesMap();
959
	            if(sourcePricings != null && !sourcePricings.isEmpty()){
960
	                in.shop2020.model.v1.catalog.SourceItemPricing tSourcePricing;
961
	                for(SourcePricings s : sourcePricings.values()){
962
	                    tSourcePricing = new in.shop2020.model.v1.catalog.SourceItemPricing();
963
	                    tSourcePricing.setSourceId(s.getSourceId());
964
	                    tSourcePricing.setItemId(it.getId());
965
	                    tSourcePricing.setMrp(s.getMrp());
966
	                    tSourcePricing.setSellingPrice(s.getSellingPrice());
967
	                    catalogClient_Prod.addSourceItemPricing(tSourcePricing);
968
	                    logger.info("SourceItemPricing updated. " + tSourcePricing.toString());
969
	                    sb.append("[SId:" + s.getSourceId() + ",MRP=" + s.getMrp() + ",SP=" + s.getSellingPrice() + "], ");
970
	                }
971
	            }
972
 
973
	            pushToProdLogger.info("Id=" + it.getId() + ",MRP=" + it.getMrp() + ",SP=" + " " + it.getSellingPrice() + sb.toString());
974
	        } catch (Exception e) {
975
	            logger.error("Error while updating prices on production", e);
976
	            return "Error while updating all prices on production. Some of the prices may not have been  updated";
977
	        }
978
    	}
2427 ankur.sing 979
 
3907 chandransh 980
        try {
981
            ContentClient contentServiceClient = new ContentClient();
982
            ContentService.Client contentClient = contentServiceClient.getClient();
983
 
5706 amit.gupta 984
            contentClient.pushContentToProduction(items.get(0).getCatalogItemId());
3907 chandransh 985
        } catch (TTransportException e) {
986
            logger.error("Error while establishing connection to the content server", e);
987
            return "Error generating content. Prices updated successfully.";
988
        } catch (TException e) {
989
            logger.error("Error while pushing content to production", e);
990
            return "Error generating content. Prices updated successfully.";
991
        } catch (ContentServiceException e) {
992
            logger.error("Error while pushing content to production", e);
993
            return "Error generating content. Prices updated successfully.";
994
        }
995
 
2427 ankur.sing 996
        return "Prices updated and content generated successfully";
2359 ankur.sing 997
    }
2427 ankur.sing 998
 
2489 ankur.sing 999
    /**
3354 chandransh 1000
     * Returns list of items with a particular status.
1001
     * @param st
1002
     * @return
1003
     */
3850 chandransh 1004
    private List<Item> getItemsByStatus(status st, int start, int limit) {
3354 chandransh 1005
        List<Item> itemList = new ArrayList<Item>();
1006
        try {
1007
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 1008
            Client catalogClient = catalogServiceClient.getClient();
3354 chandransh 1009
 
3850 chandransh 1010
            List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getAllItemsByStatusInRange(st, start, limit);
3354 chandransh 1011
 
1012
            for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
9835 rajveer 1013
                itemList.add(getItemFromThriftItem(thriftItem, null, null, null, null, null, null, null, null, null));
3354 chandransh 1014
            }
1015
        } catch (Exception e) {
1016
            logger.error("Error while getting items by status: " + st, e);
1017
        }
1018
        return itemList;
1019
    }
1020
 
1021
    /**
1022
     * Creates a new Item object and populates its attributes from thrift item passed as parameter.
4423 phani.kuma 1023
     * Also creates a Map each for VendorItemPricing, VendorItemMapping, SourceItemPricing and SimilarItems and adds these maps to the
3354 chandransh 1024
     * new Item object.
1025
     * @param thriftItem
1026
     * @param tVendorPricings
1027
     * @param tVendorMappings
4423 phani.kuma 1028
     * @param tSourceMappings
1029
     * @param tSimilarItems
5504 phani.kuma 1030
     * @param tVoucherMappings
6813 amar.kumar 1031
     * @param stockPurchaseParams 
3354 chandransh 1032
     * @return item object with attributes copied from thrift item object.
1033
     */
1034
    private Item getItemFromThriftItem(in.shop2020.model.v1.catalog.Item thriftItem, 
5946 rajveer 1035
            List<in.shop2020.model.v1.inventory.VendorItemPricing> tVendorPricings, 
1036
            List<in.shop2020.model.v1.inventory.VendorItemMapping> tVendorMappings,
4423 phani.kuma 1037
            List<in.shop2020.model.v1.catalog.SourceItemPricing> tSourceMappings,
6813 amar.kumar 1038
            List<in.shop2020.model.v1.catalog.Item> tSimilarItems, 
1039
            in.shop2020.model.v1.inventory.ItemInventory tItemInventory, 
1040
            List<in.shop2020.model.v1.catalog.VoucherItemMapping> tVoucherMappings, 
9835 rajveer 1041
            ItemStockPurchaseParams tStockPurchaseParams, Map<Long,String> saleHistory, Long freebieItemId){
3354 chandransh 1042
 
1043
        Map<String, VendorItemMapping> vItemMap = new HashMap<String, VendorItemMapping>();
1044
        VendorItemMapping vItemMapping;
1045
        if(tVendorMappings != null) {
5946 rajveer 1046
            for(in.shop2020.model.v1.inventory.VendorItemMapping vim : tVendorMappings) {
3354 chandransh 1047
                vItemMapping = new VendorItemMapping();
1048
                vItemMapping.setVendorId(vim.getVendorId());
1049
                vItemMapping.setItemKey(vim.getItemKey());
1050
                vItemMap.put(vItemMapping.getVendorId() + Item.KEY_SEPARATOR + vim.getItemKey(), vItemMapping);
1051
            }
1052
        }
1053
 
1054
        Map<Long, VendorPricings> vendorPricingMap = new HashMap<Long, VendorPricings>();
1055
        VendorPricings vPricings;
1056
        if(tVendorPricings != null) {
5946 rajveer 1057
            for(in.shop2020.model.v1.inventory.VendorItemPricing vip : tVendorPricings) {
3354 chandransh 1058
                vPricings = new VendorPricings();
1059
                vPricings.setVendorId(vip.getVendorId());
1060
                vPricings.setMop(vip.getMop());
1061
                vPricings.setDealerPrice(vip.getDealerPrice());
1062
                vPricings.setTransferPrice(vip.getTransferPrice());
6759 amar.kumar 1063
                vPricings.setNlc(vip.getNlc());
3354 chandransh 1064
                vendorPricingMap.put(vPricings.getVendorId(), vPricings);
1065
            }
1066
        }
1067
 
3558 rajveer 1068
        Map<Long, SourcePricings> sourcePricingMap = new HashMap<Long, SourcePricings>();
1069
        SourcePricings sPricings;
1070
        if(tSourceMappings != null) {
1071
            for(in.shop2020.model.v1.catalog.SourceItemPricing sip : tSourceMappings) {
1072
                sPricings = new SourcePricings();
1073
                sPricings.setSourceId(sip.getSourceId());
1074
                sPricings.setMrp(sip.getMrp());
1075
                sPricings.setSellingPrice(sip.getSellingPrice());
1076
                sourcePricingMap.put(sPricings.getSourceId(), sPricings);
1077
            }
1078
        }
4423 phani.kuma 1079
 
1080
        Map<Long, Item> SimilarItemslist = new HashMap<Long, Item>();
1081
        Item sItems;
1082
        if(tSimilarItems != null) {
1083
            for(in.shop2020.model.v1.catalog.Item sit : tSimilarItems) {
1084
            	sItems = new Item();
1085
            	sItems.setCatalogItemId(sit.getCatalogItemId());
1086
            	sItems.setProductGroup(sit.getProductGroup());
1087
            	sItems.setBrand(sit.getBrand());
1088
            	sItems.setModelNumber(sit.getModelNumber());
1089
            	sItems.setModelName(sit.getModelName());
1090
            	sItems.setContentCategory(CategoryManager.getCategoryManager().getCategoryLabel(sit.getCategory()));
1091
            	SimilarItemslist.put(sit.getCatalogItemId(), sItems);
1092
            }
1093
        }
3558 rajveer 1094
 
4431 phani.kuma 1095
        Map<Long, ItemInventory> itemInventoryMap = new HashMap<Long, ItemInventory>();
1096
        ItemInventory warehousedata;
5309 rajveer 1097
        if(tItemInventory != null) {
1098
        	Map<Long, Long> availabilityMap = tItemInventory.getAvailability();
1099
        	Map<Long, Long> reservedMap = tItemInventory.getReserved();
8709 amar.kumar 1100
        	Map<Long, Long> heldMap = tItemInventory.getHeld();
4431 phani.kuma 1101
            for(Entry<Long, Long> availability : availabilityMap.entrySet()) {
9640 amar.kumar 1102
            	Map<Integer, Long> heldInventoryMap = new HashMap<Integer, Long>();
4431 phani.kuma 1103
            	warehousedata = new ItemInventory();
1104
            	warehousedata.setWarehouseId(availability.getKey());
1105
            	warehousedata.setAvailability(availability.getValue());
1106
            	warehousedata.setReserved(reservedMap.get(availability.getKey()));
8709 amar.kumar 1107
            	warehousedata.setHeld(heldMap.get(availability.getKey()));
9640 amar.kumar 1108
            	try {
1109
	            	if(warehousedata.getHeld()>0) {
1110
	            		InventoryService.Client inventoryClient = new InventoryClient().getClient();
1111
	            		heldInventoryMap = inventoryClient.getHeldInventoryMapForItem(thriftItem.getId(), availability.getKey());
1112
	            	}
1113
	            	if(heldInventoryMap.size()>0) {
1114
	            		for(Integer source : heldInventoryMap.keySet()) {
1115
	            			switch(source) {
1116
	            				case EBAYSOURCE: warehousedata.setEbayHeld(heldInventoryMap.get(source));
9650 amar.kumar 1117
	            				break;
9640 amar.kumar 1118
	            				case SNAPDEALSOURCE: warehousedata.setSnapdealHeld(heldInventoryMap.get(source));
9650 amar.kumar 1119
	            				break;
9640 amar.kumar 1120
	            				case FLIPKARTSOURCE: warehousedata.setFlipkartHeld(heldInventoryMap.get(source));
1121
	            			}
1122
	            		}
1123
	            	}
1124
            	} catch (Exception e) {
1125
            		logger.error("Error in getting data from holdInventoryDetail for itemId " + thriftItem.getId() + 
1126
            				" and warehouse " +availability.getKey());
1127
            	}
4431 phani.kuma 1128
            	itemInventoryMap.put(warehousedata.getWarehouseId(), warehousedata);
1129
            }
1130
        }
1131
        else {
1132
        	itemInventoryMap = null;
1133
        }
5504 phani.kuma 1134
 
1135
        Map<String, VoucherItemMapping> voucherMap = new HashMap<String, VoucherItemMapping>();
1136
        VoucherItemMapping voucher;
1137
        if(tVoucherMappings != null) {
1138
            for(in.shop2020.model.v1.catalog.VoucherItemMapping tvoucher : tVoucherMappings) {
5516 phani.kuma 1139
            	voucher = new VoucherItemMapping(tvoucher.getAmount(), VoucherType.findByValue((int) tvoucher.getVoucherType()).name());
1140
            	voucherMap.put(VoucherType.findByValue((int) tvoucher.getVoucherType()).name(), voucher);
5504 phani.kuma 1141
            }
1142
        }
6813 amar.kumar 1143
 
1144
        in.shop2020.catalog.dashboard.shared.ItemStockPurchaseParams stockPurchaseParams = 
1145
        	new in.shop2020.catalog.dashboard.shared.ItemStockPurchaseParams();
1146
        if(tStockPurchaseParams != null) {
1147
        	stockPurchaseParams.setItem_id(tStockPurchaseParams.getItem_id());
1148
        	stockPurchaseParams.setMinStockLevel(tStockPurchaseParams.getMinStockLevel());
1149
        	stockPurchaseParams.setNumOfDaysStock(tStockPurchaseParams.getNumOfDaysStock());
1150
        }
1151
 
3354 chandransh 1152
        Item item = new Item(thriftItem.getId(),
1153
                thriftItem.getProductGroup(),
1154
                thriftItem.getBrand(),
1155
                thriftItem.getModelNumber(),
1156
                thriftItem.getModelName(),
1157
                thriftItem.getColor(),
1158
                CategoryManager.getCategoryManager().getCategoryLabel(thriftItem.getCategory()),
1159
                thriftItem.getCategory(),
1160
                thriftItem.getComments(),
1161
                thriftItem.getCatalogItemId(),
1162
                thriftItem.getFeatureId(),
1163
                thriftItem.getFeatureDescription(),
1164
                thriftItem.isSetMrp() ? thriftItem.getMrp() : null,
1165
                thriftItem.isSetSellingPrice() ? thriftItem.getSellingPrice() : null,
1166
                thriftItem.isSetWeight() ? thriftItem.getWeight() : null,
1167
                thriftItem.getAddedOn(),
1168
                thriftItem.getStartDate(),
5217 amit.gupta 1169
                thriftItem.isSetComingSoonStartDate() ? thriftItem.getComingSoonStartDate() : null ,
1170
                thriftItem.isSetExpectedArrivalDate() ? thriftItem.getExpectedArrivalDate() : null ,
3354 chandransh 1171
                thriftItem.getRetireDate(),
1172
                thriftItem.getUpdatedOn(),
1173
                thriftItem.getItemStatus().name(),
1174
                thriftItem.getItemStatus().getValue(),
1175
                thriftItem.getStatus_description(),
1176
                thriftItem.getBestDealText(),
6777 vikram.rag 1177
                thriftItem.getBestDealsDetailsText(),
1178
                thriftItem.getBestDealsDetailsLink(),
3354 chandransh 1179
                thriftItem.isSetBestDealValue() ? thriftItem.getBestDealValue() : null,
1180
                thriftItem.isSetBestSellingRank() ? thriftItem.getBestSellingRank() : null,
1181
                thriftItem.isDefaultForEntity(),
1182
                thriftItem.isRisky(),
3359 chandransh 1183
                thriftItem.isSetExpectedDelay() ? thriftItem.getExpectedDelay() : null,
4506 phani.kuma 1184
                thriftItem.isIsWarehousePreferenceSticky(),
5384 phani.kuma 1185
                thriftItem.isHasItemNo(),
1186
                ItemType.SERIALIZED.equals(thriftItem.getType()),
6241 amit.gupta 1187
                thriftItem.isSetShowSellingPrice() ? thriftItem.isShowSellingPrice() : false,
9843 rajveer 1188
                thriftItem.isSetHoldOverride(),
4506 phani.kuma 1189
                thriftItem.isSetPreferredVendor() ? thriftItem.getPreferredVendor() : null,
6838 vikram.rag 1190
                thriftItem.isSetPreferredInsurer() ? thriftItem.getPreferredInsurer() : null,		
4431 phani.kuma 1191
                itemInventoryMap,
3354 chandransh 1192
                vendorPricingMap,
3558 rajveer 1193
                vItemMap,
4423 phani.kuma 1194
                sourcePricingMap,
5504 phani.kuma 1195
                SimilarItemslist,
7972 amar.kumar 1196
                voucherMap, 
1197
                stockPurchaseParams.getNumOfDaysStock(), 
1198
                stockPurchaseParams.getMinStockLevel(), 
9835 rajveer 1199
                saleHistory, 
7972 amar.kumar 1200
                freebieItemId,
7291 vikram.rag 1201
                thriftItem.getAsin(),
1202
                thriftItem.getHoldInventory(),
1203
                thriftItem.getDefaultInventory());
3354 chandransh 1204
        return item;
1205
    }
1206
 
1207
    /**
2489 ankur.sing 1208
     * 
3922 chandransh 1209
     * @return True if push to production count is less than maximum allowed.
2489 ankur.sing 1210
     */
3922 chandransh 1211
    private boolean canPushToProduction() {
1212
        int count = getPushToProdCount(logFile);
1213
        return count < maxCount;
2427 ankur.sing 1214
    }
3922 chandransh 1215
 
2489 ankur.sing 1216
    /**
1217
     * If this is the first attempt to push to production for current date, returns 0
1218
     * else reads number of lines from daily rolling log file to get the count.
1219
     * @return push to production count for current date
1220
     */
2498 ankur.sing 1221
    private int getPushToProdCount(String logfile) {
1222
        // logfile is "/var/log/services/pushToProductionCount/pushToProd.log"
1223
        // this should also be set in log4j.properties
2427 ankur.sing 1224
        int lineCount = 0;
2498 ankur.sing 1225
        DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
2427 ankur.sing 1226
        Date currentDate = Calendar.getInstance().getTime();
1227
        if(pushToProdDate == null ||  !dateFormat.format(pushToProdDate).equals(dateFormat.format(currentDate))) {
1228
            pushToProdDate = currentDate;
1229
            return lineCount;
1230
        }
1231
        try {
2498 ankur.sing 1232
            BufferedReader br = new BufferedReader(new FileReader(logfile));
2427 ankur.sing 1233
            while (br.readLine() != null) {
1234
                lineCount++;
1235
            }
1236
        } catch (IOException e) {
3354 chandransh 1237
            logger.error("Error while reading the log file", e);
2427 ankur.sing 1238
        }
1239
        return lineCount;
1240
    }
4423 phani.kuma 1241
 
1242
	@Override
1243
	public boolean deleteSimilarItem(long itemId, long catalogItemId) {
1244
		try{
1245
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 1246
            Client catalogClient = catalogServiceClient.getClient();
4423 phani.kuma 1247
 
1248
            return catalogClient.deleteSimilarItem(itemId, catalogItemId);
1249
 
1250
        }catch(Exception e){
1251
            logger.error("Error while deleting the SimilarItems for: " + itemId, e);
1252
        }
1253
        return false;
1254
	}
1255
 
1256
	@Override
1257
	public Item addSimilarItem(long itemId, long catalogItemId) {
1258
		try{
1259
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 1260
            Client catalogClient = catalogServiceClient.getClient();
4423 phani.kuma 1261
            in.shop2020.model.v1.catalog.Item thriftItem = catalogClient.addSimilarItem(itemId, catalogItemId);;
1262
 
9836 rajveer 1263
            return getItemFromThriftItem(thriftItem, null, null, null, null, null, null, null, null, null);
4423 phani.kuma 1264
        }catch(Exception e){
1265
            logger.error("Error while adding the SimilarItems for: " + itemId, e);
1266
        }
1267
        return null;
1268
	}
4431 phani.kuma 1269
 
1270
	@Override
1271
	public Map<Long, ItemInventory> getProdItemInventory(long itemId) {
1272
		try {
1273
            // Initialize client for production server
1274
            CatalogClient catalogServiceClient_Prod = new CatalogClient(ConfigClientKeys.catalog_service_server_host_prod.toString(),
1275
                    ConfigClientKeys.catalog_service_server_port.toString());
5946 rajveer 1276
            Client catalogClient_Prod = catalogServiceClient_Prod.getClient();
1277
            InventoryClient inventoryServiceClient = new InventoryClient();
1278
            in.shop2020.model.v1.inventory.InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
1279
            in.shop2020.model.v1.inventory.ItemInventory thriftItemInventory = inventoryClient.getItemInventoryByItemId(itemId);
4431 phani.kuma 1280
 
1281
            Map<Long, ItemInventory> itemInventoryMap = new HashMap<Long, ItemInventory>();
1282
            ItemInventory warehousedata;
1283
            if(thriftItemInventory != null) {
1284
            	Map<Long, Long> availabilityMap = thriftItemInventory.getAvailability();
1285
            	Map<Long, Long> reservedMap = thriftItemInventory.getReserved();
8708 amar.kumar 1286
            	Map<Long, Long> heldMap = thriftItemInventory.getHeld();
4431 phani.kuma 1287
                for(Entry<Long, Long> availability : availabilityMap.entrySet()) {
9640 amar.kumar 1288
                	Map<Integer, Long> heldInventoryMap = new HashMap<Integer, Long>();
4431 phani.kuma 1289
                	warehousedata = new ItemInventory();
1290
                	warehousedata.setWarehouseId(availability.getKey());
1291
                	warehousedata.setAvailability(availability.getValue());
1292
                	warehousedata.setReserved(reservedMap.get(availability.getKey()));
8708 amar.kumar 1293
                	warehousedata.setHeld(heldMap.get(availability.getKey()));
9640 amar.kumar 1294
                	try {
1295
	            		if(warehousedata.getHeld()>0) {
1296
	                		heldInventoryMap = inventoryClient.getHeldInventoryMapForItem(itemId, availability.getKey());
1297
	                	}
1298
	                	if(heldInventoryMap.size()>0) {
1299
	                		for(Integer source : heldInventoryMap.keySet()) {
1300
	                			switch(source) {
1301
	                				case EBAYSOURCE: warehousedata.setEbayHeld(heldInventoryMap.get(source));
9649 amar.kumar 1302
	                				break;
9640 amar.kumar 1303
	                				case SNAPDEALSOURCE: warehousedata.setSnapdealHeld(heldInventoryMap.get(source));
9649 amar.kumar 1304
	                				break;
9640 amar.kumar 1305
	                				case FLIPKARTSOURCE: warehousedata.setFlipkartHeld(heldInventoryMap.get(source));
1306
	                			}
1307
	                		}
1308
	                	} 
1309
                	}catch (Exception e) {
1310
                		logger.error("Error in getting data from holdInventoryDetail for itemId " + itemId + 
1311
                				" and warehouse " +availability.getKey());
1312
                	}
4431 phani.kuma 1313
                	itemInventoryMap.put(warehousedata.getWarehouseId(), warehousedata);
1314
                }
1315
            }
1316
            else {
1317
            	itemInventoryMap = null;
1318
            }
1319
            return itemInventoryMap;
1320
        } catch (Exception e) {
1321
            logger.error("Error while updating item's risky flag on staging", e);
1322
        }
1323
		return null;
1324
	}
4649 phani.kuma 1325
 
1326
	@Override
1327
	public boolean addAuthorizationLog(long itemId, String username, String message) {
1328
		try{
1329
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 1330
            Client catalogClient = catalogServiceClient.getClient();
4649 phani.kuma 1331
 
1332
            return catalogClient.addAuthorizationLog(itemId, username, message);
1333
 
1334
        }catch(Exception e){
1335
            logger.error("Error while adding the event for: " + itemId, e);
1336
        }
1337
		return false;
1338
	}
1339
 
1340
	@Override
1341
	public Map<String, String> getConfigdataforPriceCompare() {
1342
		Map<String, String> ConfigMap = new HashMap<String, String>();
1343
		try {
1344
			ConfigMap.put("courier_cost_factor", ConfigClient.getClient().get(ConfigClientKeys.courier_cost_factor.toString()));
1345
            ConfigMap.put("courier_weight_factor", ConfigClient.getClient().get(ConfigClientKeys.courier_weight_factor.toString()));
1346
            ConfigMap.put("breakeven_divisor", ConfigClient.getClient().get(ConfigClientKeys.breakeven_divisor.toString()));
1347
            ConfigMap.put("breakeven_additon_factor", ConfigClient.getClient().get(ConfigClientKeys.breakeven_additon_factor.toString()));
1348
            ConfigMap.put("transfer_price_percentage", ConfigClient.getClient().get(ConfigClientKeys.transfer_price_percentage.toString()));
1349
            ConfigMap.put("transfer_price_factor", ConfigClient.getClient().get(ConfigClientKeys.transfer_price_factor.toString()));
1350
        } catch(ConfigException ce) {
1351
            logger.error("Unable to connect to the config server. Setting sensible defaults.", ce);
1352
            ConfigMap.put("courier_cost_factor", "60");
1353
            ConfigMap.put("courier_weight_factor", "500");
1354
            ConfigMap.put("breakeven_divisor", "0.98");
1355
            ConfigMap.put("breakeven_additon_factor", "50");
1356
            ConfigMap.put("transfer_price_percentage", "2");
1357
            ConfigMap.put("transfer_price_factor", "50");
1358
        }
1359
		return ConfigMap;
1360
	}
4957 phani.kuma 1361
 
1362
	@Override
1363
	public List<String> getAllCategories() {
1364
		List<String> categoryList = new ArrayList<String>();
1365
		List<Long> parentCategoryIDs = Arrays.asList(new Long[] {(long) 0,(long) 10001,(long) 10009,(long) 10049});
1366
        try {
1367
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 1368
            Client catalogClient = catalogServiceClient.getClient();
4957 phani.kuma 1369
 
1370
            List<in.shop2020.model.v1.catalog.Category> categories = catalogClient.getAllCategories();
1371
 
1372
            for(in.shop2020.model.v1.catalog.Category category : categories) {
1373
            	if(!parentCategoryIDs.contains(category.getParent_category_id())){
1374
            		categoryList.add(category.getDisplay_name());
1375
            	}
1376
            	else{
1377
            		continue;
1378
            	}
1379
            }
1380
        } catch (Exception e) {
1381
            logger.error("Error while getting all the categories: ", e);
1382
        }
1383
        return categoryList;
1384
	}
1385
 
1386
	@Override
1387
	public List<String> getAllBrands() {
1388
		List<String> brandsList = new ArrayList<String>();
1389
        try {
1390
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 1391
            Client catalogClient = catalogServiceClient.getClient();
4957 phani.kuma 1392
 
1393
            brandsList = catalogClient.getAllBrands();
1394
        } catch (Exception e) {
1395
            logger.error("Error while getting all the categories: ", e);
1396
        }
1397
        return brandsList;
1398
	}
5427 amit.gupta 1399
 
5504 phani.kuma 1400
	@Override
5516 phani.kuma 1401
	public boolean deleteVoucher(Long catalogItemId, Long voucherType) {
5504 phani.kuma 1402
		try{
1403
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 1404
            Client catalogClient = catalogServiceClient.getClient();
5504 phani.kuma 1405
 
1406
            return catalogClient.deleteVoucherForItem(catalogItemId, voucherType);
1407
 
1408
        }catch(Exception e){
1409
            logger.error("Error while deleting the Voucher for: " + catalogItemId, e);
1410
        }
1411
        return false;
1412
	}
1413
 
1414
	@Override
5516 phani.kuma 1415
	public boolean addVoucher(Long catalogItemId, Long voucherType, long voucherAmount) {
5504 phani.kuma 1416
		try{
1417
            CatalogClient catalogServiceClient = new CatalogClient();
5946 rajveer 1418
            Client catalogClient = catalogServiceClient.getClient();
5504 phani.kuma 1419
 
1420
            return catalogClient.addupdateVoucherForItem(catalogItemId, voucherType, voucherAmount);
1421
 
1422
        }catch(Exception e){
1423
            logger.error("Error while adding the Voucher for: " + catalogItemId, e);
1424
        }
1425
		return false;
1426
	}
1427
	@Override
5516 phani.kuma 1428
	public Map<Long, String> getvoucherTypes() {
1429
		Map<Long, String> voucherType = new HashMap<Long, String>();
5504 phani.kuma 1430
		for(VoucherType voucher : VoucherType.values())
1431
		{
5516 phani.kuma 1432
			voucherType.put((long) voucher.getValue(), voucher.name());
5504 phani.kuma 1433
		}
1434
		return voucherType;
1435
	}
1436
 
5586 phani.kuma 1437
	@Override
1438
	public boolean getConfigforentityIdMandatory() {
1439
		try {
1440
			String entityId_mandatory = ConfigClient.getClient().get(ConfigClientKeys.entityId_mandatory.toString());
1441
			if (entityId_mandatory.equals("TRUE")) {
1442
				return true;
1443
			}
1444
        } catch(ConfigException ce) {
1445
            logger.error("Unable to connect to the config server. Setting sensible defaults.", ce);
1446
        }
1447
		return false;
1448
	}
1449
 
1450
	@Override
1451
	public boolean checkEntityId(long entityId) {
1452
		try {
1453
            CatalogClient catalogServiceClient = new CatalogClient(ConfigClientKeys.catalog_service_server_host_master.toString(), ConfigClientKeys.catalog_service_server_port.toString());
5946 rajveer 1454
            Client catalogClient = catalogServiceClient.getClient();
5586 phani.kuma 1455
            return catalogClient.isValidCatalogItemId(entityId);
1456
        } catch (Exception e) {
1457
            logger.error("Error while checking for a Catalog Item Id: ", e);
1458
        }
1459
		return false;
1460
	}
1461
 
6096 amit.gupta 1462
	@Override
1463
	public String updateExpectedDelayOnProd(Item item) {
1464
		try{
1465
            CatalogClient catalogServiceClient_Prod = new CatalogClient( 
1466
                    ConfigClientKeys.catalog_service_server_host_prod.toString(),
1467
                    ConfigClientKeys.catalog_service_server_port.toString());
1468
 
1469
            Client catalogClient_Prod = catalogServiceClient_Prod.getClient();
1470
 
1471
 
1472
            in.shop2020.model.v1.catalog.Item tItem = catalogClient_Prod.getItem(item.getId());
1473
            if(item.getExpectedDelay() != null) {
1474
            	tItem.setExpectedDelay(item.getExpectedDelay());
7182 amit.gupta 1475
            	if(item.isItemType()) {
1476
                	tItem.setType(ItemType.SERIALIZED);
1477
                }
1478
                else {
1479
                	tItem.setType(ItemType.NON_SERIALIZED);
1480
                }
6096 amit.gupta 1481
	            long rItemId;
1482
	            if((rItemId = catalogClient_Prod.updateItem(tItem)) != item.getId()) {
1483
	                logger.error("Error updating item on production, returned Item Id: " + rItemId);
1484
	                return "Error updating expected delay on production";
1485
	            }
6241 amit.gupta 1486
	            InventoryClient inventoryServiceClient= new InventoryClient();
1487
	            InventoryService.Client inventoryClient = inventoryServiceClient.getClient();
6096 amit.gupta 1488
	            inventoryClient.clearItemAvailabilityCacheForItem(rItemId);
1489
	            logger.info("Successfully updated item: " + item.getId());
1490
	            return "Expected delay successfully updated on prod"; 
1491
            } else {
1492
            	return "Error:expected delay should not be null";
1493
            }
1494
        } catch (Exception e) {
6098 amit.gupta 1495
            logger.error("Error while updating expected delay on production", e);
1496
            return "Error while updating expected delay on production";
6096 amit.gupta 1497
        }
1498
	}
1499
 
6838 vikram.rag 1500
	@Override
1501
	public Map<Long, String> getAllInsurers() {
1502
		 Map<Long, String> insurersMap = new HashMap<Long, String>();
1503
	        try {
1504
	            CatalogClient catalogServiceClient = new CatalogClient();
1505
	            in.shop2020.model.v1.catalog.CatalogService.Client catalogClient = catalogServiceClient.getClient();
1506
 
1507
	            List<Insurer> insurers = catalogClient.getAllInsurers();
6096 amit.gupta 1508
 
6838 vikram.rag 1509
	            for(in.shop2020.model.v1.catalog.Insurer i : insurers) {
1510
	                insurersMap.put(i.getId(), i.getName());
1511
	            }
1512
	        } catch (Exception e) {
1513
	            logger.error("Error while getting all the vendors: ", e);
1514
	        }
1515
	        return insurersMap;
1516
	}
1517
 
1518
 
6096 amit.gupta 1519
 
1520
 
1521
 
6530 vikram.rag 1522
}