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()
2975 chandransh 474
 
475
    def getLatestArrivalsCatalogIds(self, beginIndex, totalItems, brand, categories):
548 rajveer 476
        """
2975 chandransh 477
        Returns the list of catalog ids of latest arrivals in the given categories of the given brand.
478
        To ignore the categories, pass the list as empty. To ignore brand, pass it as null.
479
 
548 rajveer 480
        Parameters:
481
         - beginIndex
482
         - totalItems
2975 chandransh 483
         - brand
484
         - categories
548 rajveer 485
        """
766 rajveer 486
        try:
2975 chandransh 487
            if beginIndex > self.latest_arrivals_limit:
766 rajveer 488
                return []
2975 chandransh 489
            stopIndex = beginIndex + totalItems
490
            if stopIndex > self.latest_arrivals_limit:
491
                stopIndex = self.latest_arrivals_limit
492
            return get_latest_arrivals_catalog_ids(beginIndex, stopIndex, brand, categories)
766 rajveer 493
        finally:
494
            close_session()
495
 
591 chandransh 496
    def getLatestArrivalsCount(self, ):
766 rajveer 497
        try:
498
            return get_latest_arrivals_count(self.latest_arrivals_limit)
499
        finally:
500
            close_session()
591 chandransh 501
 
1334 chandransh 502
    def getItemPricing(self, itemId, warehouseId):
503
        """
504
        Returns the pricing information of an item associated with the vendor of the given warehouse.
505
        Raises an exception if either the item, vendor or the associated pricing information can't be found.
506
 
507
        Parameters:
508
         - itemId
509
         - warehouseId
510
        """
1341 chandransh 511
        try:
1347 chandransh 512
            return to_t_vendor_item_pricing(get_item_pricing(itemId, warehouseId))
1341 chandransh 513
        finally:
514
            close_session()
1991 ankur.sing 515
 
516
 
517
    def getAllItemPricing(self, itemId):
518
        """
519
        Returns list of the pricing information of an item associated an item.
520
        Raises an exception if the item can't be found.
521
 
522
        Parameters:
523
         - itemId
524
        """
525
        try:
526
            return [to_t_vendor_item_pricing(vid) for vid in get_all_item_pricing(itemId)]
527
        finally:
528
            close_session()
1334 chandransh 529
 
1155 rajveer 530
    def generateNewEntityID(self, ):
531
        try:
532
            return generate_new_entity_id()
533
        finally:
534
            close_session()
535
 
635 rajveer 536
    def putCategoryObject(self, object):
537
        """
538
        Parameters:
539
         - object
540
        """
766 rajveer 541
        try:
542
            return put_category_object(object)
543
        finally:
544
            close_session()
545
 
635 rajveer 546
    def getCategoryObject(self, ):
766 rajveer 547
        try:
548
            return get_category_object()
549
        finally:
550
            close_session()
1970 rajveer 551
 
552
    def addCategory(self, category):
553
        """
554
        Parameters:
555
         - category
556
        """
557
        try:
558
            return add_category(category)
559
        finally:
560
            close_session()
561
 
562
    def getCategory(self, id):
563
        """
564
        Parameters:
565
         - id
566
        """
567
        try:
568
            return to_t_category(get_category(id))
569
        finally:
570
            close_session()
571
 
572
    def getAllCategories(self, ):
573
        try:
574
            categories = get_all_categories()
575
            return [to_t_category(category) for category in categories]
576
        finally:
577
            close_session()
578
 
579
 
2116 ankur.sing 580
    def addVendorItemPricing(self, vendorItemPricing):
1991 ankur.sing 581
        """
2116 ankur.sing 582
        Adds vendor prices corresponding to the item. If pricing already exists then updates the prices. 
1991 ankur.sing 583
        Raises an exception if either the item or vendor can't be found corresponding to their ids.
584
 
585
        Parameters:
586
         - vendorItemPricing
587
        """
588
        log_entry(self, "updateVendorItemPricing called")
589
        try:
2116 ankur.sing 590
            return add_vendor_pricing(vendorItemPricing)
1991 ankur.sing 591
        finally:
592
            close_session()
593
 
2065 ankur.sing 594
    def getAllVendors(self, ):
595
        """
596
        Return list of all vendors
597
        """
598
        return [to_t_vendor(v) for v in get_all_vendors()]
2116 ankur.sing 599
 
600
    def itemExists(self, productGroup, brand, modelNumber, color, vendorId, category):
601
        try:
602
            return check_vendor_item_mapping(productGroup, brand, modelNumber, color, vendorId, category)
603
        finally:
604
            close_session()
2065 ankur.sing 605
 
2358 ankur.sing 606
    def addVendorItemMapping(self, key, vendorItemMapping):
2116 ankur.sing 607
        """
2358 ankur.sing 608
        Adds VendorItemMapping. Updates VendorItemMapping if exists corresponding to the item key.
2116 ankur.sing 609
 
610
        Parameters:
2358 ankur.sing 611
         - key
2116 ankur.sing 612
         - vendorItemMapping
613
        """
614
        log_entry(self, "addVendorItemMapping called")
615
        try:
2358 ankur.sing 616
            return add_vendor_item_mapping(key, vendorItemMapping)
2116 ankur.sing 617
        finally:
618
            close_session()
619
 
620
    def getVendorItemMappings(self, itemId):
621
        """
622
        Returns the list of vendor item mapping corresponding to itemId passed as parameter.
623
        Raises an exception if item not found corresponding to itemId
624
 
625
        Parameters:
626
         - itemId
627
        """
628
        try:
2120 ankur.sing 629
            item_mappings = get_item_mappings(itemId)
630
            return [to_t_vendor_item_mapping(vim) for vim in item_mappings]
2116 ankur.sing 631
        finally:
632
            close_session()
633
 
634
    def checkSimilarItem(self, productGroup, brand, modelNumber, color):
635
        """
636
        Checks if similar item exists (with same ProductGroup, Brand, ModelNumber, Color)
637
        If yes, returns the itemId else returns 0
638
 
639
        Parameters:
640
         - productGroup
641
         - brand
642
         - modelNumber
643
         - color
644
        """
645
        try:
646
            return check_similar_item(productGroup, brand, modelNumber, color)
647
        finally:
648
            close_session()
649
 
2286 ankur.sing 650
    def changeItemRiskyFlag(self, itemId, risky):
651
        """
652
        Marks/Unmarks an item as risky. This flag is used for automatic marking of an item as INACTIVE in case of zero inventory.
653
 
654
        Parameters:
655
         - itemId
656
         - risky
657
        """
658
        try:
659
            change_risky_flag(itemId, risky)
660
        finally:
661
            close_session()
2116 ankur.sing 662
 
2358 ankur.sing 663
    def getItemsByVendorCategory(self, vendorCategory):
664
        """
665
        Return list of items filtered by vendor category.
666
        Raises exception if vendorCategory is null.
667
 
668
        Parameters:
669
         - vendorCategory
670
        """
671
        try:
672
            return [to_t_item(item) for item in get_items_by_vendor_category(vendorCategory)]
673
        finally:
674
            close_session()
675
 
676
    def getItemsByRiskyFlag(self, ):
677
        """
678
        Returns list of items marked as risky.
679
        """
680
        try:
681
            return [to_t_item(item) for item in get_risky_items()]
682
        finally:
683
            close_session()
2809 rajveer 684
 
685
    def getSimilarItemsCatalogIds(self, beginIndex, totalItems, itemId):
686
        """
687
        Returns list of catalog ids of items with same similarity index as of the given itemId
688
 
689
        Parameters:
690
         - beginIndex
691
         - totalItems
692
         - itemId
693
        """
694
        try:
695
            return get_similar_items_catalog_ids(beginIndex, beginIndex+totalItems, itemId)
696
        finally:
697
            close_session()
2358 ankur.sing 698
 
766 rajveer 699
    def closeSession(self, ):
700
        close_session()