Subversion Repositories SmartDukaan

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
122 ashish 1
'''
2
Created on 27-Apr-2010
3
 
4
@author: ashish
5
'''
6
from shop2020.model.v1.catalog.impl import DataService
7
from shop2020.utils.Utils import log_entry
8
from shop2020.model.v1.catalog.impl.DataAcessors import add_item, add_warehouse,\
9
    update_inventory, retire_warehouse, retire_item, change_item_status,\
635 rajveer 10
    get_item, get_all_items, get_all_items_by_status, get_item_inventoy,\
643 chandransh 11
    get_item_availability_for_warehouse, get_item_availability_for_location, get_all_warehouses_by_status,\
122 ashish 12
    get_Warehouse, get_all_warehouses_for_item, get_all_items_for_warehouse,\
766 rajveer 13
    update_item, start_item_on, close_session, \
635 rajveer 14
    retire_item_on, get_item_inventory_by_item_id, get_items_by_catalog_id,\
1308 chandransh 15
    get_best_deals, get_best_deals_catalog_ids, get_best_deals_count, get_best_sellers, get_latest_arrivals, get_latest_arrivals_catalog_ids, get_latest_arrivals_count,\
635 rajveer 16
    is_active, get_best_sellers_catalog_ids, get_best_sellers_count, put_category_object,\
871 chandransh 17
    get_category_object, mark_item_as_content_complete,\
1341 chandransh 18
    reserve_item_in_warehouse, reduce_reservation_count, generate_new_entity_id,\
2116 ankur.sing 19
    get_all_item_pricing, add_vendor_pricing, \
2035 rajveer 20
    get_item_pricing, get_category, get_all_categories, add_category,\
2116 ankur.sing 21
    get_item_status_description, get_all_vendors, check_vendor_item_mapping,\
2286 ankur.sing 22
    get_item_mappings, add_vendor_item_mapping, check_similar_item,\
2809 rajveer 23
    change_risky_flag, get_items_by_vendor_category, get_risky_items,\
24
    get_similar_items_catalog_ids
122 ashish 25
from shop2020.model.v1.catalog.impl.Convertors import to_t_item,\
2065 ankur.sing 26
    to_t_item_inventory, to_t_warehouse, to_t_vendor_item_pricing, to_t_category,\
2116 ankur.sing 27
    to_t_vendor, to_t_vendor_item_mapping
122 ashish 28
from shop2020.thriftpy.model.v1.catalog.ttypes import status,\
29
    InventoryServiceException
599 chandransh 30
from shop2020.config.client.ConfigClient import ConfigClient
122 ashish 31
 
32
 
33
class InventoryServiceHandler:
34
    '''
35
    classdocs
36
    '''
599 chandransh 37
 
1249 chandransh 38
    def __init__(self, dbname='catalog'):
122 ashish 39
        '''
40
        Constructor
41
        '''
1249 chandransh 42
        DataService.initialize(dbname)
599 chandransh 43
        try:
621 chandransh 44
            config_client = ConfigClient()
45
            self.latest_arrivals_limit = int(config_client.get_property("LATEST_ARRIVALS_LIMIT"));
46
            self.best_sellers_limit = int(config_client.get_property("BEST_SELLERS_LIMIT"))
599 chandransh 47
        except:
621 chandransh 48
            self.latest_arrivals_limit = 50
49
            self.best_sellers_limit = 50
122 ashish 50
 
51
    #DONE
52
    def addItem(self, item):
53
        """
54
        Availability and inventory attributes
55
 
56
        Parameters:
57
         - item
58
        """
59
        log_entry(self, "addItem called")
785 rajveer 60
        try:
61
            return add_item(item)
62
        finally:
63
            close_session()
122 ashish 64
 
65
    def addWarehouse(self, warehouse):
66
        """
67
        Parameters:
68
         - warehouse
69
        """
70
        log_entry(self, "addWarehouse called")
785 rajveer 71
        try:
72
            return add_warehouse(warehouse)
73
        finally:
74
            close_session()
122 ashish 75
 
483 rajveer 76
 
77
    def updateInventory(self, warehouse_id, timestamp, availability):
122 ashish 78
        """
79
        Parameters:
80
         - warehouse_id
81
         - timestamp
483 rajveer 82
         - availability
122 ashish 83
        """
84
        log_entry(self, "update Inventory called")
785 rajveer 85
        try:
86
            return update_inventory(warehouse_id, timestamp, availability)
87
        finally:
88
            close_session()
89
 
90
 
635 rajveer 91
    def isActive(self, item_id):
563 chandransh 92
        """
93
        Parameters:
635 rajveer 94
         - item_id
563 chandransh 95
        """
785 rajveer 96
        try:
97
            return is_active(item_id)
98
        finally:
99
            close_session()
122 ashish 100
 
2035 rajveer 101
    def getItemStatusDescription(self, itemId):
102
        """
103
        Parameters:
104
         - itemId
105
        """
106
        try:
107
            return get_item_status_description(itemId)
108
        finally:
109
            close_session()
110
 
122 ashish 111
    def retireWarehouse(self, warehouse_id):
112
        """
113
        Parameters:
114
         - warehouse_id
115
        """
116
        log_entry(self, "retire warehouse called")
785 rajveer 117
        try:
118
            return retire_warehouse(warehouse_id)
119
        finally:
120
            close_session()
121
 
122 ashish 122
 
123
    def retireItem(self, item_id):
124
        """
125
        Parameters:
126
        - item_id
127
        """
128
        log_entry(self, "retire item called")
785 rajveer 129
        try:
130
            return retire_item(item_id)
131
        finally:
132
            close_session()
122 ashish 133
 
134
    def startItemOn(self, item_id, timestamp):
135
        """
136
        Parameters:
137
         - item_id
138
         - timestamp
139
        """
785 rajveer 140
        try:
141
            start_item_on(item_id, timestamp)
142
        finally:
143
            close_session()
122 ashish 144
 
145
    def retireItemOn(self, item_id, timestamp):
146
        """
147
        Parameters:
148
         - item_id
149
         - timestamp
150
        """
785 rajveer 151
        try:
152
            retire_item_on(item_id, timestamp)
153
        finally:
154
            close_session()
122 ashish 155
 
156
    def changeItemStatus(self, item_id, timestamp, newstatus):
157
        """
158
        Parameters:
159
         - item_id
160
         - timestamp
161
         - newstatus
162
        """
163
        log_entry(self, "change item status called")
785 rajveer 164
        try:
165
            return change_item_status(item_id, newstatus)
166
        finally:
167
            close_session()
122 ashish 168
 
785 rajveer 169
 
122 ashish 170
    def getItem(self, item_id):
171
        """
172
        Parameters:
173
         - item_id
174
        """
175
        log_entry(self, "item requested")
785 rajveer 176
        try:
2065 ankur.sing 177
            item = to_t_item( get_item(item_id))
178
            return item
785 rajveer 179
        finally:
180
            close_session()
379 ashish 181
 
635 rajveer 182
    def getItemsByCatalogId(self, catalog_item_id):
379 ashish 183
        """
184
        Parameters:
185
        - catalog_item_id
186
        """
386 ashish 187
        log_entry(self, "item requested")
766 rajveer 188
        try:
189
            return get_items_by_catalog_id(catalog_item_id)
190
        finally:
191
            close_session()
122 ashish 192
 
483 rajveer 193
 
122 ashish 194
    def getAllItems(self, isActive):
195
        """
196
        Parameters:
197
         - isActive
198
        """
199
        log_entry(self, "all items requested")
766 rajveer 200
        try:
201
            items = get_all_items(isActive)
202
            ret_items = []
203
            for item in items:
204
                if item:
205
                    ret_items.append(to_t_item(item))
206
            return ret_items
207
        finally:
208
            close_session()
209
 
122 ashish 210
    def getAllItemsByStatus(self, itemStatus):
211
        """
212
        Parameters:
213
         - itemStatus
214
        """
215
        log_entry(self, "all items requested")
766 rajveer 216
        try:
217
            items = get_all_items_by_status(itemStatus)
218
            ret_items = []
219
            for item in items:
220
                if item:
221
                    ret_items.append(to_t_item(item))
222
            return ret_items
223
        finally:
224
            close_session()
122 ashish 225
 
226
    def getItemInventory(self, item_id):
227
        """
228
        Parameters:
229
        - item_id
230
        """
231
        log_entry(self, "item inventory requested")
766 rajveer 232
        try:
233
            inventory = get_item_inventoy(item_id)
234
            return to_t_item_inventory(inventory, item_id)
235
        finally:
236
            close_session()
122 ashish 237
 
635 rajveer 238
    def getItemInventoryByItemId(self, item_id):
239
        """
240
        Parameters:
241
         - item_id
242
        """
243
        log_entry(self, "item inventory requested")
766 rajveer 244
        try:
245
            inventory = get_item_inventory_by_item_id(item_id)
246
            return to_t_item_inventory(inventory, item_id)
247
        finally:
248
            close_session()
635 rajveer 249
 
250
    '''
379 ashish 251
    def getItemInventoryByCatalogId(self, item_id):
252
        """
253
        Parameters:
254
         - item_id
255
        """
383 ashish 256
        log_entry(self, "item inventory requested")
257
        inventory = get_item_inventory_by_catalog_id(item_id)
258
        return to_t_item_inventory(inventory, item_id)
635 rajveer 259
    '''
260
 
379 ashish 261
 
643 chandransh 262
    def getItemAvailabilityAtLocation(self, warehouse_loc, item_id):
263
        """
264
        Returns the id of the warehouse with the largest inventory of the item and the inventory size. The size of list will always be 2.
265
 
266
        Parameters:
267
         - warehouse_loc
268
         - item_id
269
        """
766 rajveer 270
        try:
271
            return get_item_availability_for_location(warehouse_loc, item_id)
272
        finally:
273
            close_session()
274
 
122 ashish 275
    def getItemAvailibilityAtWarehouse(self, warehouse_id, item_id):
276
        """
277
        Parameters:
278
         - warehouse_id
279
         - item_id
280
        """
281
        log_entry(self, "item availability at warehouse requested")
766 rajveer 282
        try:
283
            return get_item_availability_for_warehouse(warehouse_id, item_id)
284
        finally:
285
            close_session()
286
 
2080 rajveer 287
    def markItemAsContentComplete(self, entityId, category, brand, modelName, modelNumber):
288
        """
289
        Parameters:
290
         - entityId
291
         - category
292
         - brand
293
         - modelName
294
         - modelNumber
295
        """
296
        try:
297
            return mark_item_as_content_complete(entityId, category, brand, modelName, modelNumber)
298
        finally:
299
            close_session()
2075 rajveer 300
 
301
 
122 ashish 302
    def getItemInventoryHistory(self, id, item_id, warehouse_id, from_date, to_date):
303
        """
304
        Parameters:
305
         - id
306
         - item_id
307
         - warehouse_id
308
         - from_date
309
         - to_date
310
        """
311
        pass
312
 
313
    def getAllWarehouses(self, isActive):
314
        """
315
        Parameters:
316
        - isActive
317
        """
766 rajveer 318
        try:
319
            if isActive:
320
                warehouses = get_all_warehouses_by_status(status.ACTIVE)
321
            else:
322
                warehouses = get_all_warehouses_by_status(None)
323
 
324
            ret_warehouses = []
325
 
326
            for warehouse in warehouses:
327
                ret_warehouses.append(to_t_warehouse(warehouse))
328
            return ret_warehouses
329
        finally:
330
            close_session()
331
 
122 ashish 332
    def getWarehouse(self, warehouse_id):
333
        """
334
        Parameters:
335
         - warehouse_id
336
        """
337
        log_entry(self, "get warehouse call")
766 rajveer 338
        try:
339
            warehouse = get_Warehouse(warehouse_id)
340
            if warehouse:
341
                return to_t_warehouse(warehouse)
342
            else:
343
                raise InventoryServiceException(101, "no such warehouse")
344
        finally:
345
            close_session()
346
 
122 ashish 347
    def getAllWarehousesForItem(self, item_id):
348
        """
349
        Parameters:
350
         - item_id
351
        """
352
        log_entry(self, "getting all warehouses for item")
766 rajveer 353
        try:
354
            all_warehouses = get_all_warehouses_for_item(item_id)
355
            t_warehouses = []
356
            for warehouse in all_warehouses:
357
                t_warehouses.append(to_t_warehouse(warehouse))
358
            return t_warehouses
359
        finally:
360
            close_session()
361
 
122 ashish 362
    def getAllItemsForWarehouse(self, warehouse_id):
363
        """
364
        Parameters:
365
         - warehouse_id
366
        """
367
        log_entry(self, "getting all items for warehouse")
766 rajveer 368
        try:
369
            all_items = get_all_items_for_warehouse(warehouse_id)
370
            t_items = []
371
            for item in all_items:
372
                t_items.append(to_t_item(item))
373
            return t_items
374
        finally:
375
            close_session()
871 chandransh 376
 
377
    def reserveItemInWarehouse(self, itemId, warehouseId, quantity):
378
        """
379
        Increases the reservation count for an item in a warehouse. Should always succeed normally.
380
 
381
        Parameters:
382
         - itemId
383
         - warehouseId
384
        """
385
        log_entry(self, "reserveItemInWarehouse called")
386
        try:
387
            return reserve_item_in_warehouse(itemId, warehouseId, quantity)
388
        finally:
389
            close_session()
390
 
391
    def reduceReservationCount(self, itemId, warehouseId, quantity):
392
        """
393
        Decreases the reservation count for an item in a warehouse. Should always succeed normally.
394
 
395
        Parameters:
396
         - itemId
397
         - warehouseId
398
        """
399
        log_entry(self, "reduceReservationCount called")
400
        try:
401
            return reduce_reservation_count(itemId, warehouseId, quantity)
402
        finally:
403
            close_session()
766 rajveer 404
 
122 ashish 405
    def updateItem(self, item):
406
        """
407
        Parameters:
408
         - item
409
        """
410
        log_entry(self, "addItem called")
766 rajveer 411
        try:
412
            return update_item(item)
413
        finally:
414
            close_session()
415
 
626 chandransh 416
    def getBestSellers(self, start_index=0, total_items=None, category=-1):
766 rajveer 417
        try:
418
            if total_items is None:
419
                total_items = self.best_sellers_limit
420
            stop_index = start_index + total_items
421
            return get_best_sellers(start_index, stop_index, category)
422
        finally:
423
            close_session()
424
 
1926 rajveer 425
    def getBestSellersCatalogIds(self, start_index, total_items, brand, category=-1):
548 rajveer 426
        """
427
        Parameters:
428
         - beginIndex
429
         - totalItems
430
        """
766 rajveer 431
        try:
432
            if total_items is None:
433
                total_items = self.best_sellers_limit
434
            stop_index = start_index + total_items
1926 rajveer 435
            return get_best_sellers_catalog_ids(start_index, stop_index, brand, category)
766 rajveer 436
        finally:
437
            close_session()
438
 
591 chandransh 439
    def getBestSellersCount(self, ):
766 rajveer 440
        try:
2093 chandransh 441
            return get_best_sellers_count()
766 rajveer 442
        finally:
443
            close_session()
444
 
591 chandransh 445
    def getBestDeals(self,):
766 rajveer 446
        try:
447
            return get_best_deals()
448
        finally:
449
            close_session()
450
 
1926 rajveer 451
    def getBestDealsCatalogIds(self, start_index, total_items, brand,category=-1):
548 rajveer 452
        """
453
        Parameters:
454
         - beginIndex
455
         - totalItems
456
        """
766 rajveer 457
        try:
458
            stop_index = start_index + total_items
1926 rajveer 459
            return get_best_deals_catalog_ids(start_index, stop_index, brand, category)
766 rajveer 460
        finally:
461
            close_session()
462
 
591 chandransh 463
    def getBestDealsCount(self, ):
766 rajveer 464
        try:
465
            return get_best_deals_count()
466
        finally:
467
            close_session()
468
 
591 chandransh 469
    def getLatestArrivals(self,):
766 rajveer 470
        try:
471
            return get_latest_arrivals(self.latest_arrivals_limit)
472
        finally:
473
            close_session()
474
 
1926 rajveer 475
    def getLatestArrivalsCatalogIds(self, start_index, total_items, brand, category=-1):
548 rajveer 476
        """
477
        Parameters:
478
         - beginIndex
479
         - totalItems
480
        """
766 rajveer 481
        try:
482
            if start_index > self.latest_arrivals_limit:
483
                return []
484
            stop_index = start_index + total_items
485
            if stop_index > self.latest_arrivals_limit:
486
                stop_index = self.latest_arrivals_limit
1926 rajveer 487
            return get_latest_arrivals_catalog_ids(start_index, stop_index, brand, category)
766 rajveer 488
        finally:
489
            close_session()
490
 
591 chandransh 491
    def getLatestArrivalsCount(self, ):
766 rajveer 492
        try:
493
            return get_latest_arrivals_count(self.latest_arrivals_limit)
494
        finally:
495
            close_session()
591 chandransh 496
 
1334 chandransh 497
    def getItemPricing(self, itemId, warehouseId):
498
        """
499
        Returns the pricing information of an item associated with the vendor of the given warehouse.
500
        Raises an exception if either the item, vendor or the associated pricing information can't be found.
501
 
502
        Parameters:
503
         - itemId
504
         - warehouseId
505
        """
1341 chandransh 506
        try:
1347 chandransh 507
            return to_t_vendor_item_pricing(get_item_pricing(itemId, warehouseId))
1341 chandransh 508
        finally:
509
            close_session()
1991 ankur.sing 510
 
511
 
512
    def getAllItemPricing(self, itemId):
513
        """
514
        Returns list of the pricing information of an item associated an item.
515
        Raises an exception if the item can't be found.
516
 
517
        Parameters:
518
         - itemId
519
        """
520
        try:
521
            return [to_t_vendor_item_pricing(vid) for vid in get_all_item_pricing(itemId)]
522
        finally:
523
            close_session()
1334 chandransh 524
 
1155 rajveer 525
    def generateNewEntityID(self, ):
526
        try:
527
            return generate_new_entity_id()
528
        finally:
529
            close_session()
530
 
635 rajveer 531
    def putCategoryObject(self, object):
532
        """
533
        Parameters:
534
         - object
535
        """
766 rajveer 536
        try:
537
            return put_category_object(object)
538
        finally:
539
            close_session()
540
 
635 rajveer 541
    def getCategoryObject(self, ):
766 rajveer 542
        try:
543
            return get_category_object()
544
        finally:
545
            close_session()
1970 rajveer 546
 
547
    def addCategory(self, category):
548
        """
549
        Parameters:
550
         - category
551
        """
552
        try:
553
            return add_category(category)
554
        finally:
555
            close_session()
556
 
557
    def getCategory(self, id):
558
        """
559
        Parameters:
560
         - id
561
        """
562
        try:
563
            return to_t_category(get_category(id))
564
        finally:
565
            close_session()
566
 
567
    def getAllCategories(self, ):
568
        try:
569
            categories = get_all_categories()
570
            return [to_t_category(category) for category in categories]
571
        finally:
572
            close_session()
573
 
574
 
2116 ankur.sing 575
    def addVendorItemPricing(self, vendorItemPricing):
1991 ankur.sing 576
        """
2116 ankur.sing 577
        Adds vendor prices corresponding to the item. If pricing already exists then updates the prices. 
1991 ankur.sing 578
        Raises an exception if either the item or vendor can't be found corresponding to their ids.
579
 
580
        Parameters:
581
         - vendorItemPricing
582
        """
583
        log_entry(self, "updateVendorItemPricing called")
584
        try:
2116 ankur.sing 585
            return add_vendor_pricing(vendorItemPricing)
1991 ankur.sing 586
        finally:
587
            close_session()
588
 
2065 ankur.sing 589
    def getAllVendors(self, ):
590
        """
591
        Return list of all vendors
592
        """
593
        return [to_t_vendor(v) for v in get_all_vendors()]
2116 ankur.sing 594
 
595
    def itemExists(self, productGroup, brand, modelNumber, color, vendorId, category):
596
        try:
597
            return check_vendor_item_mapping(productGroup, brand, modelNumber, color, vendorId, category)
598
        finally:
599
            close_session()
2065 ankur.sing 600
 
2358 ankur.sing 601
    def addVendorItemMapping(self, key, vendorItemMapping):
2116 ankur.sing 602
        """
2358 ankur.sing 603
        Adds VendorItemMapping. Updates VendorItemMapping if exists corresponding to the item key.
2116 ankur.sing 604
 
605
        Parameters:
2358 ankur.sing 606
         - key
2116 ankur.sing 607
         - vendorItemMapping
608
        """
609
        log_entry(self, "addVendorItemMapping called")
610
        try:
2358 ankur.sing 611
            return add_vendor_item_mapping(key, vendorItemMapping)
2116 ankur.sing 612
        finally:
613
            close_session()
614
 
615
    def getVendorItemMappings(self, itemId):
616
        """
617
        Returns the list of vendor item mapping corresponding to itemId passed as parameter.
618
        Raises an exception if item not found corresponding to itemId
619
 
620
        Parameters:
621
         - itemId
622
        """
623
        try:
2120 ankur.sing 624
            item_mappings = get_item_mappings(itemId)
625
            return [to_t_vendor_item_mapping(vim) for vim in item_mappings]
2116 ankur.sing 626
        finally:
627
            close_session()
628
 
629
    def checkSimilarItem(self, productGroup, brand, modelNumber, color):
630
        """
631
        Checks if similar item exists (with same ProductGroup, Brand, ModelNumber, Color)
632
        If yes, returns the itemId else returns 0
633
 
634
        Parameters:
635
         - productGroup
636
         - brand
637
         - modelNumber
638
         - color
639
        """
640
        try:
641
            return check_similar_item(productGroup, brand, modelNumber, color)
642
        finally:
643
            close_session()
644
 
2286 ankur.sing 645
    def changeItemRiskyFlag(self, itemId, risky):
646
        """
647
        Marks/Unmarks an item as risky. This flag is used for automatic marking of an item as INACTIVE in case of zero inventory.
648
 
649
        Parameters:
650
         - itemId
651
         - risky
652
        """
653
        try:
654
            change_risky_flag(itemId, risky)
655
        finally:
656
            close_session()
2116 ankur.sing 657
 
2358 ankur.sing 658
    def getItemsByVendorCategory(self, vendorCategory):
659
        """
660
        Return list of items filtered by vendor category.
661
        Raises exception if vendorCategory is null.
662
 
663
        Parameters:
664
         - vendorCategory
665
        """
666
        try:
667
            return [to_t_item(item) for item in get_items_by_vendor_category(vendorCategory)]
668
        finally:
669
            close_session()
670
 
671
    def getItemsByRiskyFlag(self, ):
672
        """
673
        Returns list of items marked as risky.
674
        """
675
        try:
676
            return [to_t_item(item) for item in get_risky_items()]
677
        finally:
678
            close_session()
2809 rajveer 679
 
680
    def getSimilarItemsCatalogIds(self, beginIndex, totalItems, itemId):
681
        """
682
        Returns list of catalog ids of items with same similarity index as of the given itemId
683
 
684
        Parameters:
685
         - beginIndex
686
         - totalItems
687
         - itemId
688
        """
689
        try:
690
            return get_similar_items_catalog_ids(beginIndex, beginIndex+totalItems, itemId)
691
        finally:
692
            close_session()
2358 ankur.sing 693
 
766 rajveer 694
    def closeSession(self, ):
695
        close_session()