Subversion Repositories SmartDukaan

Rev

Rev 2378 | Rev 2489 | 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;
1961 ankur.sing 11
import in.shop2020.thrift.clients.CatalogServiceClient;
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 {
44
            CatalogServiceClient catalogServiceClient = new CatalogServiceClient();
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 {
63
            CatalogServiceClient catalogServiceClient = new CatalogServiceClient();
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 {
101
            CatalogServiceClient catalogServiceClient = new CatalogServiceClient();
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
        }
2068 ankur.sing 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 {
119
            CatalogServiceClient catalogServiceClient = new CatalogServiceClient();
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 {
137
            CatalogServiceClient catalogServiceClient = new CatalogServiceClient();
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
        }
2068 ankur.sing 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 {
155
            CatalogServiceClient catalogServiceClient = new CatalogServiceClient();
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
        }
2068 ankur.sing 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{
172
            CatalogServiceClient catalogServiceClient = new CatalogServiceClient();
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
    }
2359 ankur.sing 184
 
2105 ankur.sing 185
    private Item getItemFromThriftItem(in.shop2020.model.v1.catalog.Item thriftItem, 
186
            List<in.shop2020.model.v1.catalog.VendorItemPricing> tVendorPricings, 
187
            List<in.shop2020.model.v1.catalog.VendorItemMapping> tVendorMappings){
2359 ankur.sing 188
 
189
        Map<String, VendorItemMapping> vItemMap = new HashMap<String, VendorItemMapping>();
2119 ankur.sing 190
        VendorItemMapping vItemMapping;
2105 ankur.sing 191
        if(tVendorMappings != null) {
2119 ankur.sing 192
            for(in.shop2020.model.v1.catalog.VendorItemMapping vim : tVendorMappings) {
193
                vItemMapping = new VendorItemMapping();
194
                vItemMapping.setVendorId(vim.getVendorId());
195
                vItemMapping.setItemKey(vim.getItemKey());
2359 ankur.sing 196
                vItemMap.put(vItemMapping.getVendorId() + Item.KEY_SEPARATOR + vim.getItemKey(), vItemMapping);
1992 ankur.sing 197
            }
198
        }
2359 ankur.sing 199
 
2119 ankur.sing 200
        // TODO: For testing. Remove this code before moving to production.
201
        /* 
202
        Map<Long, VendorItemMapping> vItemMap = new HashMap<Long, VendorItemMapping>();
203
        vItemMap.put(1L, new VendorItemMapping(1, "Item Key Test 1"));
204
        vItemMap.put(1L, new VendorItemMapping(1, "Item Key Test 2"));
2359 ankur.sing 205
         */
206
 
2119 ankur.sing 207
        Map<Long, VendorPricings> vendorPricingMap = new HashMap<Long, VendorPricings>();
208
        VendorPricings vPricings;
2105 ankur.sing 209
        if(tVendorPricings != null) {
2119 ankur.sing 210
            for(in.shop2020.model.v1.catalog.VendorItemPricing vip : tVendorPricings) {
211
                vPricings = new VendorPricings();
212
                vPricings.setVendorId(vip.getVendorId());
213
                vPricings.setMop(vip.getMop());
214
                vPricings.setDealerPrice(vip.getDealerPrice());
215
                vPricings.setTransferPrice(vip.getTransferPrice());
216
                vendorPricingMap.put(vPricings.getVendorId(), vPricings);
2105 ankur.sing 217
            }
218
        }
2359 ankur.sing 219
 
1961 ankur.sing 220
        Item item = new Item(thriftItem.getId(),
221
                thriftItem.getProductGroup(),
222
                thriftItem.getBrand(),
223
                thriftItem.getModelNumber(),
224
                thriftItem.getModelName(),
225
                thriftItem.getColor(),
2119 ankur.sing 226
                CategoryManager.getCategoryManager().getCategoryLabel(thriftItem.getCategory()),
2126 ankur.sing 227
                thriftItem.getCategory(),
1961 ankur.sing 228
                thriftItem.getComments(),
229
                thriftItem.getCatalogItemId(),
230
                thriftItem.getFeatureId(),
231
                thriftItem.getFeatureDescription(),
2126 ankur.sing 232
                thriftItem.isSetMrp() ? thriftItem.getMrp() : -1,
1961 ankur.sing 233
                thriftItem.getMop(),
2126 ankur.sing 234
                thriftItem.isSetSellingPrice() ? thriftItem.getSellingPrice() : -1,
1961 ankur.sing 235
                thriftItem.getDealerPrice(),
2126 ankur.sing 236
                thriftItem.isSetWeight() ? thriftItem.getWeight() : -1,
1961 ankur.sing 237
                thriftItem.getAddedOn(),
238
                thriftItem.getStartDate(),
239
                thriftItem.getRetireDate(),
240
                thriftItem.getUpdatedOn(),
1992 ankur.sing 241
                thriftItem.getItemStatus().name(),
2126 ankur.sing 242
                thriftItem.getItemStatus().getValue(),
2359 ankur.sing 243
                thriftItem.getStatus_description(),
1961 ankur.sing 244
                thriftItem.getOtherInfo(),
245
                thriftItem.getBestDealText(),
2126 ankur.sing 246
                thriftItem.isSetBestDealValue() ? thriftItem.getBestDealValue() : -1,
247
                thriftItem.isSetBestSellingRank() ? thriftItem.getBestSellingRank() : -1,
2066 ankur.sing 248
                thriftItem.isDefaultForEntity(),
2252 ankur.sing 249
                thriftItem.isRisky(),
1992 ankur.sing 250
                (thriftItem.getItemInventory() != null ? thriftItem.getItemInventory().getAvailability() : null),
2119 ankur.sing 251
                vendorPricingMap,
2359 ankur.sing 252
                vItemMap);
1961 ankur.sing 253
        return item;
254
    }
255
 
256
    @Override
1992 ankur.sing 257
    public boolean updateItem(Item item) {
258
        GWT.log("Got a call to update item, Item Id: " + item.getId());
1961 ankur.sing 259
        try{
260
            CatalogServiceClient catalogServiceClient = new CatalogServiceClient();
261
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 262
 
1992 ankur.sing 263
            in.shop2020.model.v1.catalog.Item tItem = catalogClient.getItem(item.getId());
2126 ankur.sing 264
            setThriftItemParams(tItem, item);
2359 ankur.sing 265
 
2105 ankur.sing 266
            long rItemId;
267
            if((rItemId = catalogClient.updateItem(tItem)) != item.getId()) {
268
                GWT.log("Error updating item, returned Item Id: " + rItemId);
269
                return false;
270
            }
271
            GWT.log("Item updated successfully, Item Id: " + item.getId());
2359 ankur.sing 272
 
273
            Map<String, VendorItemMapping> vendorMappings = item.getVendorKeysMap();
2119 ankur.sing 274
            if(vendorMappings != null && !vendorMappings.isEmpty()) {
275
                in.shop2020.model.v1.catalog.VendorItemMapping tVendorMapping;
2359 ankur.sing 276
 
277
                for(Entry<String, VendorItemMapping> e : vendorMappings.entrySet()) {
2119 ankur.sing 278
                    tVendorMapping = new in.shop2020.model.v1.catalog.VendorItemMapping();
2359 ankur.sing 279
                    VendorItemMapping v = e.getValue();
2119 ankur.sing 280
                    tVendorMapping.setVendorId(v.getVendorId());
281
                    tVendorMapping.setItemKey(v.getItemKey());
282
                    tVendorMapping.setItemId(item.getId());
283
                    tVendorMapping.setVendorCategory(item.getVendorCategory());
2359 ankur.sing 284
                    catalogClient.addVendorItemMapping(e.getKey().substring(e.getKey().indexOf(Item.KEY_SEPARATOR)+1), tVendorMapping);
2119 ankur.sing 285
                    GWT.log("VendorItemMapping updated. " + tVendorMapping.getVendorId() + ", " + tVendorMapping.getItemId() + ", " +
286
                            tVendorMapping.getItemKey() + ", " + tVendorMapping.getVendorCategory());
287
                }
288
            }
2359 ankur.sing 289
 
2119 ankur.sing 290
            Map<Long, VendorPricings> vendorPricings = item.getVendorPricesMap();
291
            if(vendorPricings != null && !vendorPricings.isEmpty()) {
2105 ankur.sing 292
                in.shop2020.model.v1.catalog.VendorItemPricing tVendorPricing;
2119 ankur.sing 293
                for(VendorPricings v : vendorPricings.values()) {
294
                    tVendorPricing = new in.shop2020.model.v1.catalog.VendorItemPricing();
2105 ankur.sing 295
                    tVendorPricing.setVendorId(v.getVendorId());
296
                    tVendorPricing.setItemId(item.getId());
297
                    tVendorPricing.setMop(v.getMop());
298
                    tVendorPricing.setTransferPrice(v.getTransferPrice());
299
                    tVendorPricing.setDealerPrice(v.getDealerPrice());
300
                    catalogClient.addVendorItemPricing(tVendorPricing);
301
                    GWT.log("VendorItemPricing updated. " + tVendorPricing.getVendorId() + ", " + tVendorPricing.getItemId() + ", " +
302
                            tVendorPricing.getMop() + ", " + tVendorPricing.getTransferPrice() + ", " + tVendorPricing.getDealerPrice());
303
                }
304
            }
2359 ankur.sing 305
 
2105 ankur.sing 306
        }catch(Exception e){
307
            e.printStackTrace();
2427 ankur.sing 308
            return false;
2105 ankur.sing 309
        }
310
        return true;
1961 ankur.sing 311
    }
2359 ankur.sing 312
 
313
 
2066 ankur.sing 314
    @Override
315
    public Map<Long, String> getAllVendors() {
316
        Map<Long, String> vendorMap = new HashMap<Long, String>();
317
        try {
318
            CatalogServiceClient catalogServiceClient = new CatalogServiceClient();
319
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 320
 
2066 ankur.sing 321
            List<in.shop2020.model.v1.catalog.Vendor> vendors = catalogClient.getAllVendors();
2359 ankur.sing 322
 
2066 ankur.sing 323
            for(in.shop2020.model.v1.catalog.Vendor v : vendors) {
324
                vendorMap.put(v.getId(), v.getName());
325
            }
326
        } catch (Exception e) {
327
            e.printStackTrace();
328
        }
329
        return vendorMap;
330
    }
331
 
332
    @Override
333
    public Map<Long, String> getAllWarehouses() {
334
        Map<Long, String> warehouseMap = new HashMap<Long, String>();
335
        try {
336
            CatalogServiceClient catalogServiceClient = new CatalogServiceClient();
337
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 338
 
2066 ankur.sing 339
            List<in.shop2020.model.v1.catalog.Warehouse> warehouses = catalogClient.getAllWarehouses(true);
2359 ankur.sing 340
 
2066 ankur.sing 341
            for(in.shop2020.model.v1.catalog.Warehouse w : warehouses) {
342
                warehouseMap.put(w.getId(), w.getDisplayName());
343
            }
344
        } catch (Exception e) {
345
            e.printStackTrace();
346
        }
347
        return warehouseMap;
348
    }
2105 ankur.sing 349
 
350
    @Override
351
    public long addItem(Item item) {
352
        long itemId = 0;
353
        try {
354
            CatalogServiceClient catalogServiceClient = new CatalogServiceClient();
355
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
2126 ankur.sing 356
 
2359 ankur.sing 357
 
2105 ankur.sing 358
            in.shop2020.model.v1.catalog.Item tItem = new in.shop2020.model.v1.catalog.Item();
2126 ankur.sing 359
            setThriftItemParams(tItem, item);
2105 ankur.sing 360
            itemId = catalogClient.addItem(tItem);
361
 
2119 ankur.sing 362
            Map<Long, VendorPricings> vendorPricings = item.getVendorPricesMap();
363
            if(vendorPricings != null && !vendorPricings.isEmpty()) {
2105 ankur.sing 364
                in.shop2020.model.v1.catalog.VendorItemPricing tVendorPricing;
2119 ankur.sing 365
                for(VendorPricings v : vendorPricings.values()) {
366
                    tVendorPricing = new in.shop2020.model.v1.catalog.VendorItemPricing();
367
                    tVendorPricing.setVendorId(v.getVendorId());
368
                    tVendorPricing.setItemId(itemId);
369
                    tVendorPricing.setMop(v.getMop());
370
                    tVendorPricing.setTransferPrice(v.getTransferPrice());
371
                    tVendorPricing.setDealerPrice(v.getDealerPrice());
372
                    catalogClient.addVendorItemPricing(tVendorPricing);
373
                }
374
            }
2359 ankur.sing 375
 
376
            Map<String, VendorItemMapping> vendorKeysMap = item.getVendorKeysMap();
2119 ankur.sing 377
            if(vendorKeysMap != null && !vendorKeysMap.isEmpty()) {
2105 ankur.sing 378
                in.shop2020.model.v1.catalog.VendorItemMapping tVendorMapping;
2359 ankur.sing 379
                for(Entry<String, VendorItemMapping> e : vendorKeysMap.entrySet()) {
2119 ankur.sing 380
                    tVendorMapping = new in.shop2020.model.v1.catalog.VendorItemMapping();
2359 ankur.sing 381
                    VendorItemMapping v = e.getValue();
2105 ankur.sing 382
                    tVendorMapping.setVendorId(v.getVendorId());
383
                    tVendorMapping.setItemKey(v.getItemKey());
384
                    tVendorMapping.setItemId(itemId);
385
                    tVendorMapping.setVendorCategory(item.getVendorCategory());
2359 ankur.sing 386
                    catalogClient.addVendorItemMapping(e.getKey().substring(e.getKey().indexOf(Item.KEY_SEPARATOR)+1), tVendorMapping);
2105 ankur.sing 387
                }
388
            }
389
        } catch (Exception e) {
390
            e.printStackTrace();
391
        }
392
        return itemId;
393
    }
2119 ankur.sing 394
 
395
    @Override
396
    public long checkSimilarItem(String productGroup, String brand, String modelNumber, String color) {
2359 ankur.sing 397
 
2119 ankur.sing 398
        try {
399
            CatalogServiceClient catalogServiceClient = new CatalogServiceClient();
400
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
401
            return catalogClient.checkSimilarItem(productGroup, brand, modelNumber, color);
402
        } catch (Exception e) {
403
            e.printStackTrace();
404
        }
405
        return 0;
406
    }
2359 ankur.sing 407
 
2126 ankur.sing 408
    private void setThriftItemParams(in.shop2020.model.v1.catalog.Item tItem, Item item) {
409
        tItem.setId(tItem.getId());
410
        tItem.setProductGroup(item.getProductGroup());
411
        tItem.setBrand(item.getBrand());
412
        tItem.setModelName(item.getModelName());
413
        tItem.setModelNumber(item.getModelNumber());
414
        tItem.setColor(item.getColor());
2359 ankur.sing 415
 
416
        tItem.setStatus_description(item.getItemStatusDesc());
2126 ankur.sing 417
        tItem.setComments(item.getComments());
2359 ankur.sing 418
 
2126 ankur.sing 419
        if(item.getMrp() != -1) {
420
            tItem.setMrp(item.getMrp());
421
        } else {
422
            tItem.setMrpIsSet(false);
423
        }
424
        if(item.getSellingPrice() != -1) {
425
            tItem.setSellingPrice(item.getSellingPrice());
426
        } else {
427
            tItem.setSellingPriceIsSet(false);
428
        }
429
        if(item.getWeight() != -1) {
430
            tItem.setWeight(item.getWeight());
431
        } else {
432
            tItem.setWeightIsSet(false);
433
        }
2359 ankur.sing 434
 
2126 ankur.sing 435
        tItem.setMop(item.getMop());
436
        tItem.setDealerPrice(item.getDealerPrice());
437
        tItem.setTransferPrice(item.getTransferPrice());
438
 
439
        tItem.setBestDealText(item.getBestDealsText());
440
        if(item.getBestDealsValue() != -1) {
441
            tItem.setBestDealValue(item.getBestDealsValue());
442
        } else {
443
            tItem.setBestDealValueIsSet(false);
444
        }
445
        if(item.getBestSellingRank() != -1) {
446
            tItem.setBestSellingRank(item.getBestSellingRank());
447
        } else {
448
            tItem.setBestSellingRankIsSet(false);
449
        }
450
        tItem.setDefaultForEntity(item.isDefaultForEntity());
2252 ankur.sing 451
        tItem.setRisky(item.isRisky());
2359 ankur.sing 452
 
2126 ankur.sing 453
        tItem.setStartDate(item.getStartDate());
454
        tItem.setUpdatedOn(Calendar.getInstance().getTimeInMillis());
455
        tItem.setRetireDate(item.getRetireDate());
456
        tItem.setHotspotCategory(item.getVendorCategory());
457
    }
458
 
459
    @Override
460
    public void pauseItem(long itemId) {
461
        try {
462
            CatalogServiceClient catalogServiceClient = new CatalogServiceClient();
463
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 464
 
2126 ankur.sing 465
            catalogClient.changeItemStatus(itemId, Calendar.getInstance().getTimeInMillis(), status.PAUSED);
466
        } catch (Exception e) {
467
            e.printStackTrace();
468
        }
2359 ankur.sing 469
 
2126 ankur.sing 470
    }
471
 
472
    @Override
473
    public void markInProcess(long itemId) {
474
        try {
475
            CatalogServiceClient catalogServiceClient = new CatalogServiceClient();
476
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 477
 
2126 ankur.sing 478
            catalogClient.changeItemStatus(itemId, Calendar.getInstance().getTimeInMillis(), status.IN_PROCESS);
479
        } catch (Exception e) {
480
            e.printStackTrace();
481
        }
482
    }
2359 ankur.sing 483
 
2126 ankur.sing 484
    @Override
485
    public void phaseoutItem(long itemId) {
486
        try {
487
            CatalogServiceClient catalogServiceClient = new CatalogServiceClient();
488
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 489
 
2126 ankur.sing 490
            catalogClient.changeItemStatus(itemId, Calendar.getInstance().getTimeInMillis(), status.PHASED_OUT);
491
        } catch (Exception e) {
492
            e.printStackTrace();
493
        }
494
    }
2359 ankur.sing 495
 
2126 ankur.sing 496
    @Override
497
    public void activateItem(long itemId) {
498
        try {
499
            CatalogServiceClient catalogServiceClient = new CatalogServiceClient();
500
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
2359 ankur.sing 501
 
2126 ankur.sing 502
            catalogClient.changeItemStatus(itemId, Calendar.getInstance().getTimeInMillis(), status.ACTIVE);
503
        } catch (Exception e) {
504
            e.printStackTrace();
505
        }
506
    }
2359 ankur.sing 507
 
508
    @Override
509
    public boolean changeItemRiskyFlag(long itemId, boolean risky) {
510
        try {
511
            // Initialize client for staging server
512
            CatalogServiceClient catalogServiceClient = new CatalogServiceClient();
513
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
514
 
515
            // Initialize client for production server
516
            CatalogServiceClient catalogServiceClient_Prod = new CatalogServiceClient(CatalogServiceClient.class.getSimpleName(), 
517
                    ConfigClientKeys.catalog_service_server_host_prod.toString(),
518
                    ConfigClientKeys.catalog_service_server_port.toString());
519
            InventoryService.Client catalogClient_Prod = catalogServiceClient_Prod.getClient();
520
            catalogClient.changeItemRiskyFlag(itemId, risky);
521
 
522
            try{
523
                catalogClient_Prod.changeItemRiskyFlag(itemId, risky);
524
            }catch(Exception e){
525
                e.printStackTrace();
526
                // If not able to change risky flag on production, revert on staging and return false (to show error to user).
527
                catalogClient.changeItemRiskyFlag(itemId, !risky);        
528
                return false;
529
            }
530
        } catch (Exception e) {
531
            e.printStackTrace();
532
            return false;
533
        }
534
        return true;
535
    }
536
 
2427 ankur.sing 537
 
538
    /**
539
     * Retuns list of Items filtered by Vendor category (column is hotspotCategory in catalog.item table)
540
     * This list is used to generate master sheet (excel sheet)
541
     * @param category
542
     * @return
543
     */
2359 ankur.sing 544
    List<Item> getItemsByVendorCategory(String category) {
545
        List<Item> itemList = new ArrayList<Item>();
546
        try {
547
            CatalogServiceClient catalogServiceClient = new CatalogServiceClient();
548
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
549
 
550
            List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getItemsByVendorCategory(category);
551
 
552
            for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
553
                List<in.shop2020.model.v1.catalog.VendorItemPricing> vip = catalogClient.getAllItemPricing(thriftItem.getId());
554
                List<in.shop2020.model.v1.catalog.VendorItemMapping> vim = catalogClient.getVendorItemMappings(thriftItem.getId());
555
                itemList.add(getItemFromThriftItem(thriftItem, vip, vim));
556
            }
557
        } catch (Exception e) {
558
            e.printStackTrace();
559
        }
560
        Collections.sort(itemList, new ItemsComparator());
561
        return itemList;
562
    }
563
 
2427 ankur.sing 564
    /**
565
     * Returns list of items with a particular status.
566
     * @param st
567
     * @return
568
     */
2359 ankur.sing 569
    List<Item> getItemsByStatus(status st) {
570
        List<Item> itemList = new ArrayList<Item>();
571
        try {
572
            CatalogServiceClient catalogServiceClient = new CatalogServiceClient();
573
            InventoryService.Client catalogClient = catalogServiceClient.getClient();
574
 
575
            List<in.shop2020.model.v1.catalog.Item> thriftItems = catalogClient.getAllItemsByStatus(st);
576
 
577
            for(in.shop2020.model.v1.catalog.Item thriftItem : thriftItems) {
578
                itemList.add(getItemFromThriftItem(thriftItem, null, null));
579
            }
580
        } catch (Exception e) {
581
            e.printStackTrace();
582
        }
583
        Collections.sort(itemList, new ItemsComparator());
584
        return itemList;
585
    }
586
 
587
    @Override
2427 ankur.sing 588
    public String updateItemOnProduction(Item item) {
589
        GWT.log("Update item on production call, Item Id: " + item.getId());
590
 
591
        String errMsg = checkPushToProdCount();
592
        // If errMsg is not null, then return that message to user
593
        // else move forward with update.
594
        if(errMsg != null) {
595
            return errMsg;
596
        }
597
        log(item);
2359 ankur.sing 598
        try{
2427 ankur.sing 599
            /*CatalogServiceClient catalogServiceClient_Prod = new CatalogServiceClient(CatalogServiceClient.class.getSimpleName(), 
2359 ankur.sing 600
                    ConfigClientKeys.catalog_service_server_host_prod.toString(),
2427 ankur.sing 601
                    ConfigClientKeys.catalog_service_server_port.toString());*/
2359 ankur.sing 602
 
603
            //for testing, put catalog_service_server_port_test in shop2020.cfg
2427 ankur.sing 604
            CatalogServiceClient catalogServiceClient_Prod = new CatalogServiceClient(CatalogServiceClient.class.getSimpleName(), 
605
                    ConfigClientKeys.catalog_service_server_host.toString(), "catalog_service_server_port_test");
2359 ankur.sing 606
 
607
            InventoryService.Client catalogClient_Prod = catalogServiceClient_Prod.getClient();
608
 
609
            in.shop2020.model.v1.catalog.Item tItem = catalogClient_Prod.getItem(item.getId());
2427 ankur.sing 610
 
611
            // -1 is used to signify that the corresponding double/float/long/int field is NULL
612
            // It is done so because these fields cannot be set as null in Item bean and thrift object item.
2359 ankur.sing 613
            if(item.getMrp() != -1) {
614
                tItem.setMrp(item.getMrp());
615
            } else {
616
                tItem.setMrpIsSet(false);
617
            }
618
            if(item.getSellingPrice() != -1) {
619
                tItem.setSellingPrice(item.getSellingPrice());
620
            } else {
621
                tItem.setSellingPriceIsSet(false);
622
            }
623
            if(item.getMop() != -1) {
624
                tItem.setMop(item.getMop());
625
            } else {
626
                tItem.setMopIsSet(false);
627
            }
628
            if(item.getDealerPrice() != -1) {
629
                tItem.setDealerPrice(item.getDealerPrice());
630
            } else {
631
                tItem.setDealerPriceIsSet(false);
632
            }
633
            if(item.getTransferPrice() != -1) {
634
                tItem.setTransferPrice(item.getTransferPrice());
635
            } else {
636
                tItem.setTransferPriceIsSet(false);
637
            }
638
 
639
            long rItemId;
640
            if((rItemId = catalogClient_Prod.updateItem(tItem)) != item.getId()) {
641
                GWT.log("Error updating item, returned Item Id: " + rItemId);
2427 ankur.sing 642
                return "Error updating item prices on production";
2359 ankur.sing 643
            }
644
            GWT.log("Item updated successfully, Item Id: " + item.getId());
645
 
646
            Map<Long, VendorPricings> vendorPricings = item.getVendorPricesMap();
647
            if(vendorPricings != null && !vendorPricings.isEmpty()) {
648
                in.shop2020.model.v1.catalog.VendorItemPricing tVendorPricing;
649
                for(VendorPricings v : vendorPricings.values()) {
650
                    tVendorPricing = new in.shop2020.model.v1.catalog.VendorItemPricing();
651
                    tVendorPricing.setVendorId(v.getVendorId());
652
                    tVendorPricing.setItemId(item.getId());
653
                    tVendorPricing.setMop(v.getMop());
654
                    tVendorPricing.setTransferPrice(v.getTransferPrice());
655
                    tVendorPricing.setDealerPrice(v.getDealerPrice());
656
                    catalogClient_Prod.addVendorItemPricing(tVendorPricing);
657
                    GWT.log("VendorItemPricing updated. " + tVendorPricing.getVendorId() + ", " + tVendorPricing.getItemId() + ", " +
658
                            tVendorPricing.getMop() + ", " + tVendorPricing.getTransferPrice() + ", " + tVendorPricing.getDealerPrice());
659
                }
660
            }
661
        } catch (Exception e) {
662
            e.printStackTrace();
2427 ankur.sing 663
            return "Error while updating all prices on production. Some of the prices may have been  updated";
2359 ankur.sing 664
        }
2427 ankur.sing 665
        /*
2372 rajveer 666
        // Push the content of one item to production 
667
        Process p;
668
		try {
2378 ankur.sing 669
		    String scriptPath = ConfigClient.getClient().get(ConfigClientKeys.PUSH_PRICES_TO_PROD_SCRIPT_PATH.toString());
670
			p = Runtime.getRuntime().exec(scriptPath + " " + item.getCatalogItemId());
2372 rajveer 671
			p.waitFor();
672
		} catch (IOException e) {
673
			GWT.log("Not able to update content on production");
674
			e.printStackTrace();
2427 ankur.sing 675
			return "Error generating content. Prices updated successfully.";
2372 rajveer 676
		} catch (InterruptedException e) {
677
			GWT.log("Not able to update content on production");
678
			e.printStackTrace();
2427 ankur.sing 679
			return "Error generating content. Prices updated successfully.";
2378 ankur.sing 680
		} catch (ConfigException e) {
681
            // TODO Auto-generated catch block
682
            e.printStackTrace();
2427 ankur.sing 683
            return "Error getting content script path";
684
        }*/
685
        return "Prices updated and content generated successfully";
2359 ankur.sing 686
    }
2427 ankur.sing 687
 
688
    private String checkPushToProdCount() {
689
        int count = 0, maxCount;
690
        try {
691
            //logfile = ConfigClient.getClient().get(ConfigClientKeys.push_prices_to_prod_log_file.toString());
692
            maxCount = Integer.parseInt(ConfigClient.getClient().get(ConfigClientKeys.push_prices_to_prod_max_count.toString()));
693
            count = getPushToProdCount();
694
            if(count >= maxCount) {
695
                return "Maximum push to production count reached for today";
696
            }
697
        } catch (ConfigException e1) {
698
            e1.printStackTrace();
699
            return "Error getting push to production parameters";
700
        }
701
        return null;
702
    }
703
 
704
    private void log(Item item) {
705
        Logger log = Logger.getLogger(CatalogServiceImpl.class);
706
        log.info("MRP: " + item.getMrp() + ", SP: " + item.getSellingPrice());
707
    }
708
 
709
    private int getPushToProdCount() {
710
        int lineCount = 0;
711
        DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm");
712
        Date currentDate = Calendar.getInstance().getTime();
713
        if(pushToProdDate == null ||  !dateFormat.format(pushToProdDate).equals(dateFormat.format(currentDate))) {
714
            pushToProdDate = currentDate;
715
            return lineCount;
716
        }
717
        try {
718
            BufferedReader br = new BufferedReader(new FileReader("/home/ankur/logs/pushToProd.log"));
719
            while (br.readLine() != null) {
720
                lineCount++;
721
            }
722
        } catch (IOException e) {
723
            e.printStackTrace();
724
        }
725
        return lineCount;
726
    }
727
}