Subversion Repositories SmartDukaan

Rev

Rev 3129 | Rev 3354 | 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;
2068 ankur.sing 5
import in.shop2020.catalog.dashboard.shared.ItemsComparator;
2119 ankur.sing 6
import in.shop2020.catalog.dashboard.shared.VendorItemMapping;
7
import in.shop2020.catalog.dashboard.shared.VendorPricings;
2378 ankur.sing 8
import in.shop2020.config.ConfigException;
1961 ankur.sing 9
import in.shop2020.model.v1.catalog.InventoryService;
2105 ankur.sing 10
import in.shop2020.model.v1.catalog.status;
3129 rajveer 11
import in.shop2020.thrift.clients.CatalogClient;
2378 ankur.sing 12
import in.shop2020.thrift.clients.config.ConfigClient;
2119 ankur.sing 13
import in.shop2020.utils.CategoryManager;
2359 ankur.sing 14
import in.shop2020.utils.ConfigClientKeys;
1961 ankur.sing 15
 
2427 ankur.sing 16
import java.io.BufferedReader;
17
import java.io.FileReader;
2359 ankur.sing 18
import java.io.IOException;
2427 ankur.sing 19
import java.text.DateFormat;
20
import java.text.SimpleDateFormat;
1961 ankur.sing 21
import java.util.ArrayList;
2105 ankur.sing 22
import java.util.Calendar;
2068 ankur.sing 23
import java.util.Collections;
2427 ankur.sing 24
import java.util.Date;
1992 ankur.sing 25
import java.util.HashMap;
1961 ankur.sing 26
import java.util.List;
1992 ankur.sing 27
import java.util.Map;
2359 ankur.sing 28
import java.util.Map.Entry;
1961 ankur.sing 29
 
2427 ankur.sing 30
import org.apache.log4j.Logger;
2359 ankur.sing 31
 
1961 ankur.sing 32
import com.google.gwt.core.client.GWT;
33
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
34
 
35
@SuppressWarnings("serial")
36
public class CatalogServiceImpl extends RemoteServiceServlet implements CatalogService {
37
 
2427 ankur.sing 38
    private static Date pushToProdDate;
39
 
1961 ankur.sing 40
    public List<Item> getAllItems(){
41
        List<Item> itemList = new ArrayList<Item>();
2359 ankur.sing 42
 
1961 ankur.sing 43
        try {
3129 rajveer 44
            CatalogClient catalogServiceClient = new CatalogClient();
1961 ankur.sing 45
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 46
 
2119 ankur.sing 47
            List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getAllItems(false);
2359 ankur.sing 48
 
2119 ankur.sing 49
            for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
50
                itemList.add(getItemFromThriftItem(thriftItem, null, null));
51
            }
52
        } catch (Exception e) {
53
            e.printStackTrace();
54
        }
55
        Collections.sort(itemList, new ItemsComparator());
56
        return itemList;
57
    }
2208 ankur.sing 58
 
2359 ankur.sing 59
    public List<Item> getAllActiveItems(){
2208 ankur.sing 60
        List<Item> itemList = new ArrayList<Item>();
2359 ankur.sing 61
 
2208 ankur.sing 62
        try {
3129 rajveer 63
            CatalogClient catalogServiceClient = new CatalogClient();
2208 ankur.sing 64
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 65
 
66
            List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getAllItems(true);
67
 
2208 ankur.sing 68
            for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
2427 ankur.sing 69
                itemList.add(getItemFromThriftItem(thriftItem, null, null));
2208 ankur.sing 70
            }
71
        } catch (Exception e) {
72
            e.printStackTrace();
73
        }
74
        Collections.sort(itemList, new ItemsComparator());
75
        return itemList;
76
    }
2359 ankur.sing 77
 
78
    @Override
79
    public List<Item> getAllPhasedOutItems(){
80
        return getItemsByStatus(status.PHASED_OUT);
81
    }
82
 
83
    @Override
2208 ankur.sing 84
    public List<Item> getAllPausedItems(){
2359 ankur.sing 85
        return getItemsByStatus(status.PAUSED);
2208 ankur.sing 86
    }
2359 ankur.sing 87
 
88
    @Override
89
    public List<Item> getAllInProcessItems() {
90
        return getItemsByStatus(status.IN_PROCESS);
91
    }
92
 
93
    @Override
94
    public List<Item> getAllContentCompleteItems() {
95
        return getItemsByStatus(status.CONTENT_COMPLETE);
96
    }
97
 
98
    public List<Item> getBestDeals(){
2119 ankur.sing 99
        List<Item> itemList = new ArrayList<Item>();
100
        try {
3129 rajveer 101
            CatalogClient catalogServiceClient = new CatalogClient();
2119 ankur.sing 102
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 103
 
104
            List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getBestDeals();
1992 ankur.sing 105
            for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
2105 ankur.sing 106
                itemList.add(getItemFromThriftItem(thriftItem, null, null));
1992 ankur.sing 107
            }
2359 ankur.sing 108
        } catch(Exception e){
1961 ankur.sing 109
            e.printStackTrace();
110
        }
2562 chandransh 111
        //Collections.sort(itemList, new ItemsComparator());
1961 ankur.sing 112
        return itemList;
113
    }
114
 
2359 ankur.sing 115
    @Override
116
    public List<Item> getRiskyItems() {
1961 ankur.sing 117
        List<Item> itemList = new ArrayList<Item>();
118
        try {
3129 rajveer 119
            CatalogClient catalogServiceClient = new CatalogClient();
1961 ankur.sing 120
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 121
 
122
            List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getItemsByRiskyFlag();
1992 ankur.sing 123
            for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
2105 ankur.sing 124
                itemList.add(getItemFromThriftItem(thriftItem, null, null));
1992 ankur.sing 125
            }
1961 ankur.sing 126
        } catch(Exception e){
127
            e.printStackTrace();
128
        }
2068 ankur.sing 129
        Collections.sort(itemList, new ItemsComparator());
1961 ankur.sing 130
        return itemList;
131
    }
2359 ankur.sing 132
 
1961 ankur.sing 133
    public List<Item> getBestSellers(){
134
        List<Item> itemList = new ArrayList<Item>();
2359 ankur.sing 135
 
1961 ankur.sing 136
        try {
3129 rajveer 137
            CatalogClient catalogServiceClient = new CatalogClient();
1961 ankur.sing 138
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 139
 
1961 ankur.sing 140
            List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getBestSellers();
1992 ankur.sing 141
            for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
2105 ankur.sing 142
                itemList.add(getItemFromThriftItem(thriftItem, null, null));
1992 ankur.sing 143
            }
1961 ankur.sing 144
        } catch(Exception e){
145
            e.printStackTrace();
146
        }
2562 chandransh 147
        //Collections.sort(itemList, new ItemsComparator());
1961 ankur.sing 148
        return itemList;        
149
    }
2359 ankur.sing 150
 
1961 ankur.sing 151
    public List<Item> getLatestArrivals(){
152
        List<Item> itemList = new ArrayList<Item>();
2359 ankur.sing 153
 
1961 ankur.sing 154
        try {
3129 rajveer 155
            CatalogClient catalogServiceClient = new CatalogClient();
1961 ankur.sing 156
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 157
 
1961 ankur.sing 158
            List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getLatestArrivals();
1992 ankur.sing 159
            for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
2105 ankur.sing 160
                //List<in.shop2020.model.v1.catalog.VendorItemPricing> vip = catalogClient.getAllItemPricing(thriftItem.getId());
161
                itemList.add(getItemFromThriftItem(thriftItem, null, null));
1992 ankur.sing 162
            }
1961 ankur.sing 163
        } catch(Exception e){
164
            e.printStackTrace();
165
        }
2562 chandransh 166
        //Collections.sort(itemList, new ItemsComparator());
1961 ankur.sing 167
        return itemList;
168
    }
2359 ankur.sing 169
 
1961 ankur.sing 170
    public Item getItem(long itemId){
171
        try{
3129 rajveer 172
            CatalogClient catalogServiceClient = new CatalogClient();
1961 ankur.sing 173
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
174
            in.shop2020.model.v1.catalog.Item thriftItem = catalogClient.getItem(itemId);
2359 ankur.sing 175
 
1992 ankur.sing 176
            List<in.shop2020.model.v1.catalog.VendorItemPricing> vip = catalogClient.getAllItemPricing(thriftItem.getId());
2119 ankur.sing 177
            List<in.shop2020.model.v1.catalog.VendorItemMapping> vim = catalogClient.getVendorItemMappings(thriftItem.getId());
178
            return getItemFromThriftItem(thriftItem, vip, vim);
1961 ankur.sing 179
        }catch(Exception e){
180
            e.printStackTrace();
181
        }
182
        return null;
183
    }
2489 ankur.sing 184
 
185
    /**
186
     * Creates a new Item object and populates its attributes from thrift item passed as parameter.
187
     * Also creates a Map each for VendorItemPricing and VendorItemMapping and adds these maps to the
188
     * new Item object.
189
     * @param thriftItem
190
     * @param tVendorPricings
191
     * @param tVendorMappings
192
     * @return item object with attributes copied from thrift item object.
193
     */
2105 ankur.sing 194
    private Item getItemFromThriftItem(in.shop2020.model.v1.catalog.Item thriftItem, 
195
            List<in.shop2020.model.v1.catalog.VendorItemPricing> tVendorPricings, 
196
            List<in.shop2020.model.v1.catalog.VendorItemMapping> tVendorMappings){
2359 ankur.sing 197
 
198
        Map<String, VendorItemMapping> vItemMap = new HashMap<String, VendorItemMapping>();
2119 ankur.sing 199
        VendorItemMapping vItemMapping;
2105 ankur.sing 200
        if(tVendorMappings != null) {
2119 ankur.sing 201
            for(in.shop2020.model.v1.catalog.VendorItemMapping vim : tVendorMappings) {
202
                vItemMapping = new VendorItemMapping();
203
                vItemMapping.setVendorId(vim.getVendorId());
204
                vItemMapping.setItemKey(vim.getItemKey());
2359 ankur.sing 205
                vItemMap.put(vItemMapping.getVendorId() + Item.KEY_SEPARATOR + vim.getItemKey(), vItemMapping);
1992 ankur.sing 206
            }
207
        }
2359 ankur.sing 208
 
2119 ankur.sing 209
        // TODO: For testing. Remove this code before moving to production.
210
        /* 
211
        Map<Long, VendorItemMapping> vItemMap = new HashMap<Long, VendorItemMapping>();
212
        vItemMap.put(1L, new VendorItemMapping(1, "Item Key Test 1"));
213
        vItemMap.put(1L, new VendorItemMapping(1, "Item Key Test 2"));
2359 ankur.sing 214
         */
215
 
2119 ankur.sing 216
        Map<Long, VendorPricings> vendorPricingMap = new HashMap<Long, VendorPricings>();
217
        VendorPricings vPricings;
2105 ankur.sing 218
        if(tVendorPricings != null) {
2119 ankur.sing 219
            for(in.shop2020.model.v1.catalog.VendorItemPricing vip : tVendorPricings) {
220
                vPricings = new VendorPricings();
221
                vPricings.setVendorId(vip.getVendorId());
222
                vPricings.setMop(vip.getMop());
223
                vPricings.setDealerPrice(vip.getDealerPrice());
224
                vPricings.setTransferPrice(vip.getTransferPrice());
225
                vendorPricingMap.put(vPricings.getVendorId(), vPricings);
2105 ankur.sing 226
            }
227
        }
2359 ankur.sing 228
 
1961 ankur.sing 229
        Item item = new Item(thriftItem.getId(),
2489 ankur.sing 230
                thriftItem.getHotspotCategory(),
1961 ankur.sing 231
                thriftItem.getProductGroup(),
232
                thriftItem.getBrand(),
233
                thriftItem.getModelNumber(),
234
                thriftItem.getModelName(),
235
                thriftItem.getColor(),
2119 ankur.sing 236
                CategoryManager.getCategoryManager().getCategoryLabel(thriftItem.getCategory()),
2126 ankur.sing 237
                thriftItem.getCategory(),
1961 ankur.sing 238
                thriftItem.getComments(),
239
                thriftItem.getCatalogItemId(),
240
                thriftItem.getFeatureId(),
241
                thriftItem.getFeatureDescription(),
2489 ankur.sing 242
                thriftItem.isSetMrp() ? thriftItem.getMrp() : null,
1961 ankur.sing 243
                thriftItem.getMop(),
2489 ankur.sing 244
                thriftItem.isSetSellingPrice() ? thriftItem.getSellingPrice() : null,
1961 ankur.sing 245
                thriftItem.getDealerPrice(),
2489 ankur.sing 246
                thriftItem.isSetWeight() ? thriftItem.getWeight() : null,
1961 ankur.sing 247
                thriftItem.getAddedOn(),
248
                thriftItem.getStartDate(),
249
                thriftItem.getRetireDate(),
250
                thriftItem.getUpdatedOn(),
1992 ankur.sing 251
                thriftItem.getItemStatus().name(),
2126 ankur.sing 252
                thriftItem.getItemStatus().getValue(),
2359 ankur.sing 253
                thriftItem.getStatus_description(),
1961 ankur.sing 254
                thriftItem.getOtherInfo(),
255
                thriftItem.getBestDealText(),
2489 ankur.sing 256
                thriftItem.isSetBestDealValue() ? thriftItem.getBestDealValue() : null,
257
                thriftItem.isSetBestSellingRank() ? thriftItem.getBestSellingRank() : null,
2066 ankur.sing 258
                thriftItem.isDefaultForEntity(),
2252 ankur.sing 259
                thriftItem.isRisky(),
1992 ankur.sing 260
                (thriftItem.getItemInventory() != null ? thriftItem.getItemInventory().getAvailability() : null),
2119 ankur.sing 261
                vendorPricingMap,
2359 ankur.sing 262
                vItemMap);
1961 ankur.sing 263
        return item;
264
    }
265
 
266
    @Override
1992 ankur.sing 267
    public boolean updateItem(Item item) {
268
        GWT.log("Got a call to update item, Item Id: " + item.getId());
1961 ankur.sing 269
        try{
3129 rajveer 270
            CatalogClient catalogServiceClient = new CatalogClient();
1961 ankur.sing 271
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 272
 
1992 ankur.sing 273
            in.shop2020.model.v1.catalog.Item tItem = catalogClient.getItem(item.getId());
2126 ankur.sing 274
            setThriftItemParams(tItem, item);
2359 ankur.sing 275
 
2105 ankur.sing 276
            long rItemId;
277
            if((rItemId = catalogClient.updateItem(tItem)) != item.getId()) {
278
                GWT.log("Error updating item, returned Item Id: " + rItemId);
279
                return false;
280
            }
281
            GWT.log("Item updated successfully, Item Id: " + item.getId());
2359 ankur.sing 282
 
283
            Map<String, VendorItemMapping> vendorMappings = item.getVendorKeysMap();
2119 ankur.sing 284
            if(vendorMappings != null && !vendorMappings.isEmpty()) {
285
                in.shop2020.model.v1.catalog.VendorItemMapping tVendorMapping;
2359 ankur.sing 286
 
287
                for(Entry<String, VendorItemMapping> e : vendorMappings.entrySet()) {
2119 ankur.sing 288
                    tVendorMapping = new in.shop2020.model.v1.catalog.VendorItemMapping();
2359 ankur.sing 289
                    VendorItemMapping v = e.getValue();
2119 ankur.sing 290
                    tVendorMapping.setVendorId(v.getVendorId());
291
                    tVendorMapping.setItemKey(v.getItemKey());
292
                    tVendorMapping.setItemId(item.getId());
293
                    tVendorMapping.setVendorCategory(item.getVendorCategory());
2359 ankur.sing 294
                    catalogClient.addVendorItemMapping(e.getKey().substring(e.getKey().indexOf(Item.KEY_SEPARATOR)+1), tVendorMapping);
2119 ankur.sing 295
                    GWT.log("VendorItemMapping updated. " + tVendorMapping.getVendorId() + ", " + tVendorMapping.getItemId() + ", " +
296
                            tVendorMapping.getItemKey() + ", " + tVendorMapping.getVendorCategory());
297
                }
298
            }
2359 ankur.sing 299
 
2119 ankur.sing 300
            Map<Long, VendorPricings> vendorPricings = item.getVendorPricesMap();
301
            if(vendorPricings != null && !vendorPricings.isEmpty()) {
2105 ankur.sing 302
                in.shop2020.model.v1.catalog.VendorItemPricing tVendorPricing;
2119 ankur.sing 303
                for(VendorPricings v : vendorPricings.values()) {
304
                    tVendorPricing = new in.shop2020.model.v1.catalog.VendorItemPricing();
2105 ankur.sing 305
                    tVendorPricing.setVendorId(v.getVendorId());
306
                    tVendorPricing.setItemId(item.getId());
307
                    tVendorPricing.setMop(v.getMop());
308
                    tVendorPricing.setTransferPrice(v.getTransferPrice());
309
                    tVendorPricing.setDealerPrice(v.getDealerPrice());
310
                    catalogClient.addVendorItemPricing(tVendorPricing);
311
                    GWT.log("VendorItemPricing updated. " + tVendorPricing.getVendorId() + ", " + tVendorPricing.getItemId() + ", " +
312
                            tVendorPricing.getMop() + ", " + tVendorPricing.getTransferPrice() + ", " + tVendorPricing.getDealerPrice());
313
                }
314
            }
2359 ankur.sing 315
 
2105 ankur.sing 316
        }catch(Exception e){
317
            e.printStackTrace();
2427 ankur.sing 318
            return false;
2105 ankur.sing 319
        }
320
        return true;
1961 ankur.sing 321
    }
2359 ankur.sing 322
 
323
 
2066 ankur.sing 324
    @Override
325
    public Map<Long, String> getAllVendors() {
326
        Map<Long, String> vendorMap = new HashMap<Long, String>();
327
        try {
3129 rajveer 328
            CatalogClient catalogServiceClient = new CatalogClient();
2066 ankur.sing 329
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 330
 
2066 ankur.sing 331
            List<in.shop2020.model.v1.catalog.Vendor> vendors = catalogClient.getAllVendors();
2359 ankur.sing 332
 
2066 ankur.sing 333
            for(in.shop2020.model.v1.catalog.Vendor v : vendors) {
334
                vendorMap.put(v.getId(), v.getName());
335
            }
336
        } catch (Exception e) {
337
            e.printStackTrace();
338
        }
339
        return vendorMap;
340
    }
341
 
342
    @Override
343
    public Map<Long, String> getAllWarehouses() {
344
        Map<Long, String> warehouseMap = new HashMap<Long, String>();
345
        try {
3129 rajveer 346
            CatalogClient catalogServiceClient = new CatalogClient();
2066 ankur.sing 347
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 348
 
2066 ankur.sing 349
            List<in.shop2020.model.v1.catalog.Warehouse> warehouses = catalogClient.getAllWarehouses(true);
2359 ankur.sing 350
 
2066 ankur.sing 351
            for(in.shop2020.model.v1.catalog.Warehouse w : warehouses) {
352
                warehouseMap.put(w.getId(), w.getDisplayName());
353
            }
354
        } catch (Exception e) {
355
            e.printStackTrace();
356
        }
357
        return warehouseMap;
358
    }
2105 ankur.sing 359
 
360
    @Override
361
    public long addItem(Item item) {
362
        long itemId = 0;
363
        try {
3129 rajveer 364
            CatalogClient catalogServiceClient = new CatalogClient();
2105 ankur.sing 365
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
2126 ankur.sing 366
 
2359 ankur.sing 367
 
2105 ankur.sing 368
            in.shop2020.model.v1.catalog.Item tItem = new in.shop2020.model.v1.catalog.Item();
2126 ankur.sing 369
            setThriftItemParams(tItem, item);
2105 ankur.sing 370
            itemId = catalogClient.addItem(tItem);
371
 
2119 ankur.sing 372
            Map<Long, VendorPricings> vendorPricings = item.getVendorPricesMap();
373
            if(vendorPricings != null && !vendorPricings.isEmpty()) {
2105 ankur.sing 374
                in.shop2020.model.v1.catalog.VendorItemPricing tVendorPricing;
2119 ankur.sing 375
                for(VendorPricings v : vendorPricings.values()) {
376
                    tVendorPricing = new in.shop2020.model.v1.catalog.VendorItemPricing();
377
                    tVendorPricing.setVendorId(v.getVendorId());
378
                    tVendorPricing.setItemId(itemId);
379
                    tVendorPricing.setMop(v.getMop());
380
                    tVendorPricing.setTransferPrice(v.getTransferPrice());
381
                    tVendorPricing.setDealerPrice(v.getDealerPrice());
382
                    catalogClient.addVendorItemPricing(tVendorPricing);
383
                }
384
            }
2359 ankur.sing 385
 
386
            Map<String, VendorItemMapping> vendorKeysMap = item.getVendorKeysMap();
2119 ankur.sing 387
            if(vendorKeysMap != null && !vendorKeysMap.isEmpty()) {
2105 ankur.sing 388
                in.shop2020.model.v1.catalog.VendorItemMapping tVendorMapping;
2359 ankur.sing 389
                for(Entry<String, VendorItemMapping> e : vendorKeysMap.entrySet()) {
2119 ankur.sing 390
                    tVendorMapping = new in.shop2020.model.v1.catalog.VendorItemMapping();
2359 ankur.sing 391
                    VendorItemMapping v = e.getValue();
2105 ankur.sing 392
                    tVendorMapping.setVendorId(v.getVendorId());
393
                    tVendorMapping.setItemKey(v.getItemKey());
394
                    tVendorMapping.setItemId(itemId);
395
                    tVendorMapping.setVendorCategory(item.getVendorCategory());
2359 ankur.sing 396
                    catalogClient.addVendorItemMapping(e.getKey().substring(e.getKey().indexOf(Item.KEY_SEPARATOR)+1), tVendorMapping);
2105 ankur.sing 397
                }
398
            }
399
        } catch (Exception e) {
400
            e.printStackTrace();
401
        }
402
        return itemId;
403
    }
2119 ankur.sing 404
 
405
    @Override
406
    public long checkSimilarItem(String productGroup, String brand, String modelNumber, String color) {
2359 ankur.sing 407
 
2119 ankur.sing 408
        try {
3129 rajveer 409
            CatalogClient catalogServiceClient = new CatalogClient();
2119 ankur.sing 410
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
411
            return catalogClient.checkSimilarItem(productGroup, brand, modelNumber, color);
412
        } catch (Exception e) {
413
            e.printStackTrace();
414
        }
415
        return 0;
416
    }
2359 ankur.sing 417
 
2126 ankur.sing 418
    private void setThriftItemParams(in.shop2020.model.v1.catalog.Item tItem, Item item) {
419
        tItem.setId(tItem.getId());
420
        tItem.setProductGroup(item.getProductGroup());
421
        tItem.setBrand(item.getBrand());
422
        tItem.setModelName(item.getModelName());
423
        tItem.setModelNumber(item.getModelNumber());
424
        tItem.setColor(item.getColor());
2359 ankur.sing 425
 
426
        tItem.setStatus_description(item.getItemStatusDesc());
2126 ankur.sing 427
        tItem.setComments(item.getComments());
2359 ankur.sing 428
 
2489 ankur.sing 429
        if(item.getMrp() != null) {
2126 ankur.sing 430
            tItem.setMrp(item.getMrp());
431
        } else {
432
            tItem.setMrpIsSet(false);
433
        }
2489 ankur.sing 434
        if(item.getSellingPrice() != null) {
2126 ankur.sing 435
            tItem.setSellingPrice(item.getSellingPrice());
436
        } else {
437
            tItem.setSellingPriceIsSet(false);
438
        }
2489 ankur.sing 439
        if(item.getWeight() != null) {
2126 ankur.sing 440
            tItem.setWeight(item.getWeight());
441
        } else {
442
            tItem.setWeightIsSet(false);
443
        }
2489 ankur.sing 444
        if(item.getMop() != null) {
445
            tItem.setMop(item.getMop());
446
        } else {
447
            tItem.setMopIsSet(false);
448
        }
449
        if(item.getDealerPrice() != null) {
450
            tItem.setDealerPrice(item.getDealerPrice());
451
        } else {
452
            tItem.setTransferPriceIsSet(false);
453
        }
454
        if(item.getTransferPrice() != null) {
455
            tItem.setTransferPrice(item.getTransferPrice());
456
        } else {
457
            tItem.setTransferPriceIsSet(false);
458
        }
2126 ankur.sing 459
        tItem.setBestDealText(item.getBestDealsText());
2489 ankur.sing 460
        if(item.getBestDealsValue() != null) {
2126 ankur.sing 461
            tItem.setBestDealValue(item.getBestDealsValue());
462
        } else {
463
            tItem.setBestDealValueIsSet(false);
464
        }
2489 ankur.sing 465
        if(item.getBestSellingRank() != null) {
2126 ankur.sing 466
            tItem.setBestSellingRank(item.getBestSellingRank());
467
        } else {
468
            tItem.setBestSellingRankIsSet(false);
469
        }
470
        tItem.setDefaultForEntity(item.isDefaultForEntity());
2252 ankur.sing 471
        tItem.setRisky(item.isRisky());
2359 ankur.sing 472
 
2489 ankur.sing 473
        if(item.getStartDate() != null) {
474
            tItem.setStartDate(item.getStartDate());
475
        } else {
476
            tItem.setStartDateIsSet(false);
477
        }
478
        if(item.getRetireDate() != null) {
479
            tItem.setRetireDate(item.getRetireDate());
480
        } else {
481
            tItem.setRetireDateIsSet(false);
482
        }
2126 ankur.sing 483
        tItem.setUpdatedOn(Calendar.getInstance().getTimeInMillis());
2489 ankur.sing 484
 
2126 ankur.sing 485
        tItem.setHotspotCategory(item.getVendorCategory());
486
    }
487
 
488
    @Override
489
    public void pauseItem(long itemId) {
490
        try {
3129 rajveer 491
            CatalogClient catalogServiceClient = new CatalogClient();
2126 ankur.sing 492
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 493
 
2126 ankur.sing 494
            catalogClient.changeItemStatus(itemId, Calendar.getInstance().getTimeInMillis(), status.PAUSED);
495
        } catch (Exception e) {
496
            e.printStackTrace();
497
        }
2359 ankur.sing 498
 
2126 ankur.sing 499
    }
500
 
501
    @Override
502
    public void markInProcess(long itemId) {
503
        try {
3129 rajveer 504
            CatalogClient catalogServiceClient = new CatalogClient();
2126 ankur.sing 505
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 506
 
2126 ankur.sing 507
            catalogClient.changeItemStatus(itemId, Calendar.getInstance().getTimeInMillis(), status.IN_PROCESS);
508
        } catch (Exception e) {
509
            e.printStackTrace();
510
        }
511
    }
2359 ankur.sing 512
 
2126 ankur.sing 513
    @Override
514
    public void phaseoutItem(long itemId) {
515
        try {
3129 rajveer 516
            CatalogClient catalogServiceClient = new CatalogClient();
2126 ankur.sing 517
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 518
 
2126 ankur.sing 519
            catalogClient.changeItemStatus(itemId, Calendar.getInstance().getTimeInMillis(), status.PHASED_OUT);
520
        } catch (Exception e) {
521
            e.printStackTrace();
522
        }
523
    }
2359 ankur.sing 524
 
2126 ankur.sing 525
    @Override
526
    public void activateItem(long itemId) {
527
        try {
3129 rajveer 528
            CatalogClient catalogServiceClient = new CatalogClient();
2126 ankur.sing 529
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 530
 
2126 ankur.sing 531
            catalogClient.changeItemStatus(itemId, Calendar.getInstance().getTimeInMillis(), status.ACTIVE);
532
        } catch (Exception e) {
533
            e.printStackTrace();
534
        }
535
    }
2359 ankur.sing 536
 
537
    @Override
538
    public boolean changeItemRiskyFlag(long itemId, boolean risky) {
539
        try {
540
            // Initialize client for staging server
3129 rajveer 541
            CatalogClient catalogServiceClient = new CatalogClient();
2359 ankur.sing 542
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
543
 
544
            // Initialize client for production server
3165 chandransh 545
            CatalogClient catalogServiceClient_Prod = new CatalogClient(ConfigClientKeys.catalog_service_server_host_prod.toString(),
2359 ankur.sing 546
                    ConfigClientKeys.catalog_service_server_port.toString());
547
            InventoryService.Client catalogClient_Prod = catalogServiceClient_Prod.getClient();
548
            catalogClient.changeItemRiskyFlag(itemId, risky);
549
 
550
            try{
551
                catalogClient_Prod.changeItemRiskyFlag(itemId, risky);
552
            }catch(Exception e){
553
                e.printStackTrace();
554
                // If not able to change risky flag on production, revert on staging and return false (to show error to user).
555
                catalogClient.changeItemRiskyFlag(itemId, !risky);        
556
                return false;
557
            }
558
        } catch (Exception e) {
559
            e.printStackTrace();
560
            return false;
561
        }
562
        return true;
563
    }
564
 
2427 ankur.sing 565
 
566
    /**
567
     * Retuns list of Items filtered by Vendor category (column is hotspotCategory in catalog.item table)
568
     * This list is used to generate master sheet (excel sheet)
569
     * @param category
570
     * @return
571
     */
2359 ankur.sing 572
    List<Item> getItemsByVendorCategory(String category) {
573
        List<Item> itemList = new ArrayList<Item>();
574
        try {
3129 rajveer 575
            CatalogClient catalogServiceClient = new CatalogClient();
2359 ankur.sing 576
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
577
 
578
            List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getItemsByVendorCategory(category);
579
 
580
            for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
581
                List<in.shop2020.model.v1.catalog.VendorItemPricing> vip = catalogClient.getAllItemPricing(thriftItem.getId());
582
                List<in.shop2020.model.v1.catalog.VendorItemMapping> vim = catalogClient.getVendorItemMappings(thriftItem.getId());
583
                itemList.add(getItemFromThriftItem(thriftItem, vip, vim));
584
            }
585
        } catch (Exception e) {
586
            e.printStackTrace();
587
        }
588
        Collections.sort(itemList, new ItemsComparator());
589
        return itemList;
590
    }
591
 
2427 ankur.sing 592
    /**
593
     * Returns list of items with a particular status.
594
     * @param st
595
     * @return
596
     */
2359 ankur.sing 597
    List<Item> getItemsByStatus(status st) {
598
        List<Item> itemList = new ArrayList<Item>();
599
        try {
3129 rajveer 600
            CatalogClient catalogServiceClient = new CatalogClient();
2359 ankur.sing 601
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
602
 
603
            List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getAllItemsByStatus(st);
604
 
605
            for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
606
                itemList.add(getItemFromThriftItem(thriftItem, null, null));
607
            }
608
        } catch (Exception e) {
609
            e.printStackTrace();
610
        }
611
        Collections.sort(itemList, new ItemsComparator());
612
        return itemList;
613
    }
614
 
615
    @Override
2427 ankur.sing 616
    public String updateItemOnProduction(Item item) {
617
        GWT.log("Update item on production call, Item Id: " + item.getId());
618
 
619
        String errMsg = checkPushToProdCount();
620
        // If errMsg is not null, then return that message to user
621
        // else move forward with update.
622
        if(errMsg != null) {
623
            return errMsg;
624
        }
2359 ankur.sing 625
        try{
3165 chandransh 626
            CatalogClient catalogServiceClient_Prod = new CatalogClient( 
2359 ankur.sing 627
                    ConfigClientKeys.catalog_service_server_host_prod.toString(),
2498 ankur.sing 628
                    ConfigClientKeys.catalog_service_server_port.toString());
2359 ankur.sing 629
 
630
            //for testing, put catalog_service_server_port_test in shop2020.cfg
2498 ankur.sing 631
            /*CatalogServiceClient catalogServiceClient_Prod = new CatalogServiceClient(CatalogServiceClient.class.getSimpleName(), 
632
                    ConfigClientKeys.catalog_service_server_host.toString(), "catalog_service_server_port_test");*/
2359 ankur.sing 633
 
634
            InventoryService.Client catalogClient_Prod = catalogServiceClient_Prod.getClient();
635
 
636
            in.shop2020.model.v1.catalog.Item tItem = catalogClient_Prod.getItem(item.getId());
2427 ankur.sing 637
 
2489 ankur.sing 638
            if(item.getMrp() != null) {
2359 ankur.sing 639
                tItem.setMrp(item.getMrp());
640
            } else {
641
                tItem.setMrpIsSet(false);
642
            }
2489 ankur.sing 643
            if(item.getSellingPrice() != null) {
2359 ankur.sing 644
                tItem.setSellingPrice(item.getSellingPrice());
645
            } else {
646
                tItem.setSellingPriceIsSet(false);
647
            }
2489 ankur.sing 648
            if(item.getMop() != null) {
2359 ankur.sing 649
                tItem.setMop(item.getMop());
650
            } else {
651
                tItem.setMopIsSet(false);
652
            }
2489 ankur.sing 653
            if(item.getDealerPrice() != null) {
2359 ankur.sing 654
                tItem.setDealerPrice(item.getDealerPrice());
655
            } else {
656
                tItem.setDealerPriceIsSet(false);
657
            }
2489 ankur.sing 658
            if(item.getTransferPrice() != null) {
2359 ankur.sing 659
                tItem.setTransferPrice(item.getTransferPrice());
660
            } else {
661
                tItem.setTransferPriceIsSet(false);
662
            }
663
            long rItemId;
664
            if((rItemId = catalogClient_Prod.updateItem(tItem)) != item.getId()) {
665
                GWT.log("Error updating item, returned Item Id: " + rItemId);
2427 ankur.sing 666
                return "Error updating item prices on production";
2359 ankur.sing 667
            }
668
            GWT.log("Item updated successfully, Item Id: " + item.getId());
669
 
670
            Map<Long, VendorPricings> vendorPricings = item.getVendorPricesMap();
2489 ankur.sing 671
            StringBuilder sb = new StringBuilder();
2359 ankur.sing 672
            if(vendorPricings != null && !vendorPricings.isEmpty()) {
673
                in.shop2020.model.v1.catalog.VendorItemPricing tVendorPricing;
674
                for(VendorPricings v : vendorPricings.values()) {
675
                    tVendorPricing = new in.shop2020.model.v1.catalog.VendorItemPricing();
676
                    tVendorPricing.setVendorId(v.getVendorId());
677
                    tVendorPricing.setItemId(item.getId());
678
                    tVendorPricing.setMop(v.getMop());
679
                    tVendorPricing.setTransferPrice(v.getTransferPrice());
680
                    tVendorPricing.setDealerPrice(v.getDealerPrice());
681
                    catalogClient_Prod.addVendorItemPricing(tVendorPricing);
682
                    GWT.log("VendorItemPricing updated. " + tVendorPricing.getVendorId() + ", " + tVendorPricing.getItemId() + ", " +
683
                            tVendorPricing.getMop() + ", " + tVendorPricing.getTransferPrice() + ", " + tVendorPricing.getDealerPrice());
2489 ankur.sing 684
                    sb.append("[VId:" + v.getVendorId() + ",MOP=" + v.getMop() + ",TP=" + v.getTransferPrice() + ",DP=" + v.getDealerPrice() + "], ");
2359 ankur.sing 685
                }
686
            }
2489 ankur.sing 687
            logItemDetails("Id=" + item.getId() + ",MRP=" + item.getMrp() + ",SP=" + " " + item.getSellingPrice() + sb.toString());
2359 ankur.sing 688
        } catch (Exception e) {
689
            e.printStackTrace();
2427 ankur.sing 690
            return "Error while updating all prices on production. Some of the prices may have been  updated";
2359 ankur.sing 691
        }
2489 ankur.sing 692
 
2427 ankur.sing 693
        /*
2372 rajveer 694
        // Push the content of one item to production 
695
        Process p;
696
		try {
2378 ankur.sing 697
		    String scriptPath = ConfigClient.getClient().get(ConfigClientKeys.PUSH_PRICES_TO_PROD_SCRIPT_PATH.toString());
698
			p = Runtime.getRuntime().exec(scriptPath + " " + item.getCatalogItemId());
2372 rajveer 699
			p.waitFor();
700
		} catch (IOException e) {
701
			GWT.log("Not able to update content on production");
702
			e.printStackTrace();
2427 ankur.sing 703
			return "Error generating content. Prices updated successfully.";
2372 rajveer 704
		} catch (InterruptedException e) {
705
			GWT.log("Not able to update content on production");
706
			e.printStackTrace();
2427 ankur.sing 707
			return "Error generating content. Prices updated successfully.";
2378 ankur.sing 708
		} catch (ConfigException e) {
709
            // TODO Auto-generated catch block
710
            e.printStackTrace();
2427 ankur.sing 711
            return "Error getting content script path";
712
        }*/
713
        return "Prices updated and content generated successfully";
2359 ankur.sing 714
    }
2427 ankur.sing 715
 
2489 ankur.sing 716
    /**
717
     * 
718
     * @return null if push to production count is less than maximum allowed.
719
     *   <br>otherwise error message to be passed to the client side for showing to the user
720
     */
2427 ankur.sing 721
    private String checkPushToProdCount() {
722
        int count = 0, maxCount;
723
        try {
2498 ankur.sing 724
            String logfile = ConfigClient.getClient().get(ConfigClientKeys.push_prices_to_prod_log_file.toString());
2427 ankur.sing 725
            maxCount = Integer.parseInt(ConfigClient.getClient().get(ConfigClientKeys.push_prices_to_prod_max_count.toString()));
2498 ankur.sing 726
            count = getPushToProdCount(logfile);
2427 ankur.sing 727
            if(count >= maxCount) {
728
                return "Maximum push to production count reached for today";
729
            }
730
        } catch (ConfigException e1) {
731
            e1.printStackTrace();
732
            return "Error getting push to production parameters";
733
        }
734
        return null;
735
    }
736
 
2489 ankur.sing 737
    /**
738
     * Log push to production details
739
     * @param str
740
     */
741
    private void logItemDetails(String str) {
2427 ankur.sing 742
        Logger log = Logger.getLogger(CatalogServiceImpl.class);
2489 ankur.sing 743
        log.info(str);
2427 ankur.sing 744
    }
745
 
2489 ankur.sing 746
    /**
747
     * If this is the first attempt to push to production for current date, returns 0
748
     * else reads number of lines from daily rolling log file to get the count.
749
     * @return push to production count for current date
750
     */
2498 ankur.sing 751
    private int getPushToProdCount(String logfile) {
752
        // logfile is "/var/log/services/pushToProductionCount/pushToProd.log"
753
        // this should also be set in log4j.properties
2427 ankur.sing 754
        int lineCount = 0;
2498 ankur.sing 755
        DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
2427 ankur.sing 756
        Date currentDate = Calendar.getInstance().getTime();
757
        if(pushToProdDate == null ||  !dateFormat.format(pushToProdDate).equals(dateFormat.format(currentDate))) {
758
            pushToProdDate = currentDate;
759
            return lineCount;
760
        }
761
        try {
2498 ankur.sing 762
            BufferedReader br = new BufferedReader(new FileReader(logfile));
2427 ankur.sing 763
            while (br.readLine() != null) {
764
                lineCount++;
765
            }
766
        } catch (IOException e) {
767
            e.printStackTrace();
768
        }
769
        return lineCount;
770
    }
771
}