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