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